【问题标题】:Wrong year in time conversion for final day of the year [duplicate]一年中最后一天的时间转换错误[重复]
【发布时间】: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


【解决方案1】:

你需要使用'yyyy'而不是'YYYY':

DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

来自文档:

Symbol  Meaning                     Presentation      Examples
y       year-of-era                 year              2004; 04
Y       week-based-year             year              1996; 96

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2017-08-19
    • 2017-11-05
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多