为什么 SimpleDateFormat 给出不同的时间偏移量?
Why SimpleDateFormat is giving different time offsets?
我正在将一些日期从旧格式转换为新格式。但它的输出在格式化字符串中包含不同的时区。示例程序:
public class Dated {
private static final DateFormat OLD_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final DateFormat NEW_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
public static void main(String[] args) throws ParseException {
List<String> list = Arrays.asList(
"2015-01-18 00:00:00",
"2016-01-18 00:00:00",
"2016-03-11 00:00:00",
"2016-03-13 00:00:00",
"2016-05-18 00:00:00",
"2016-05-19 00:00:00",
"2016-05-20 00:00:00",
"2016-11-09 00:00:00");
System.out.println(Locale.getDefault());
for (String key : list) {
System.out.println(NEW_FORMAT.format(OLD_FORMAT.parse(key)));
}
}
}
同一个程序 运行 在我的 PC 上运行良好,具有正确(且恒定)的语言环境偏移量。但是当我在实际应用程序 运行 所在的服务器中执行它时,会得到以下结果:
en_US
2015-01-18T00:00:00.000-08:00
2016-01-18T00:00:00.000-08:00
2016-03-11T00:00:00.000-08:00
2016-03-13T00:00:00.000-08:00
2016-05-18T00:00:00.000-07:00
2016-05-19T00:00:00.000-07:00
2016-05-20T00:00:00.000-07:00
2016-11-09T00:00:00.000-08:00
我想知道为什么会这样?我是否遗漏了代码中的某些内容,或者它只是 SimpleDateFormat
的错误实现?
注意:我对任何 Java 8
或 Joda-time
解决方案都不感兴趣。
您所在的时区对 5 月的日期应用夏令时。冬季为 UTC-8,夏季为 UTC-7。
我正在将一些日期从旧格式转换为新格式。但它的输出在格式化字符串中包含不同的时区。示例程序:
public class Dated {
private static final DateFormat OLD_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final DateFormat NEW_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
public static void main(String[] args) throws ParseException {
List<String> list = Arrays.asList(
"2015-01-18 00:00:00",
"2016-01-18 00:00:00",
"2016-03-11 00:00:00",
"2016-03-13 00:00:00",
"2016-05-18 00:00:00",
"2016-05-19 00:00:00",
"2016-05-20 00:00:00",
"2016-11-09 00:00:00");
System.out.println(Locale.getDefault());
for (String key : list) {
System.out.println(NEW_FORMAT.format(OLD_FORMAT.parse(key)));
}
}
}
同一个程序 运行 在我的 PC 上运行良好,具有正确(且恒定)的语言环境偏移量。但是当我在实际应用程序 运行 所在的服务器中执行它时,会得到以下结果:
en_US
2015-01-18T00:00:00.000-08:00
2016-01-18T00:00:00.000-08:00
2016-03-11T00:00:00.000-08:00
2016-03-13T00:00:00.000-08:00
2016-05-18T00:00:00.000-07:00
2016-05-19T00:00:00.000-07:00
2016-05-20T00:00:00.000-07:00
2016-11-09T00:00:00.000-08:00
我想知道为什么会这样?我是否遗漏了代码中的某些内容,或者它只是 SimpleDateFormat
的错误实现?
注意:我对任何 Java 8
或 Joda-time
解决方案都不感兴趣。
您所在的时区对 5 月的日期应用夏令时。冬季为 UTC-8,夏季为 UTC-7。