【发布时间】:2018-11-18 07:01:36
【问题描述】:
下面的代码 sn-p 打印错误的年份。我在这里做错了吗?它将日期时间打印为2018-12-31 00:00:00,但实际上应该是2017-12-31 00:00:00。我在 JavaScript 中转换了相同的时代,它工作正常。我还将时区设置为UTC,它给出的结果为2017-12-30 18:30:00,但将时区设置为Asia/Calcutta会增加一年。我在这里错过了什么?
import java.time.*;
import java.time.format.*;
public class MyClass {
public static void main(String args[]) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
String time = LocalDateTime.ofInstant(Instant.ofEpochMilli(1514658600000L), ZoneId.of("Asia/Calcutta")).format(format);
System.out.println(time);
}
}
【问题讨论】:
-
"YYYY-MM-dd HH:mm:ss"应该是"yyyy-MM-dd HH:mm:ss" -
我用 YYYY 和 yyyy 都试过你的代码,效果很好
-
2017 年 12 月 31 日是一个星期日。在周日是一周的第一天的周计划中(例如,在美国),周年将是 2018 年,即错误。在许多国家使用的 ISO 周计划中,星期一是一周的第一天,因此该星期日的周年将是 2017 年,也就是说,在这种情况下是正确的。格式模式字符串仍然是错误的,在其他情况下会给出错误的结果,还有@AngeloImmediate
标签: java datetime java-time date-conversion