【问题标题】:Wrong Day Of Week from java time api来自java time api的错误星期几
【发布时间】:2014-09-04 10:05:04
【问题描述】:

我正在使用 java 8 时间 API 将时间(以毫秒为单位)转换为日期,并且从该日期开始我得到错误的星期几。 这是我的代码 -

long millis = 1406865600000L; 
LocalDate localDate = LocalDate.ofEpochDay(millis/1000);
DayOfWeek dow = localDate.getDayOfWeek();
System.out.println(dow);

它打印出星期四,而这是 8 月 1 日星期五。 请帮忙。

【问题讨论】:

    标签: java datetime time


    【解决方案1】:

    LocalDate.ofEpochDay() 期望 day count 作为它的参数,并且您正在传递 second count(这是您将毫秒计数除以 1000 得到的结果)。

    【讨论】:

      【解决方案2】:

      Answer by NPE 是正确的。

      解决方案代码示例

      这是正确处理这种情况的代码。

      如果您的输入数字是自 1970 年 UTC 开始的纪元以来的毫秒数,则创建一个 Instant

      Instant instant = Instant.ofEpochMilli( 1406865600000L );
      

      确定日期需要时区。对于任何给定的时刻,日期在全球范围内因区域而异。例如,在法国巴黎午夜过后几分钟是新的一天,而在魁北克蒙特利尔仍然是“昨天”。

      因此,通过应用您想要/预期的时区,将您的 Instant 调整为 ZonedDateTime 对象。

      ZoneId z = ZoneId.of( "America/Montreal" );
      ZonedDateTime zdt = instant.atZone( z );
      

      询问星期几。 Java 在枚举 DayOfWeek 中表示一周中的每一天。

      DayOfWeek dow = zdt.getDayOfWeek();
      

      请求DayOfWeek 对象将星期几的名称翻译成Locale 中定义的人类语言。

      String output = dow.getDisplayName( TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH );
      

      转储到控制台。至少对于 America/Montreal,结果与您预期的一样,8 月 1 日星期五。

      System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt + " | dow: " + dow + " | output: " + output );
      

      输入:1406865600000 |瞬间:2014-08-01T04:00:00Z | zdt: 2014-08-01T00:00-04:00[美国/蒙特利尔] |道琼斯指数:星期五 |输出:vendredi

      【讨论】:

        猜你喜欢
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 1970-01-01
        相关资源
        最近更新 更多