从java时间api错误的一周

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从java时间api错误的一周相关的知识,希望对你有一定的参考价值。

我正在使用java 8时间API将时间(以毫秒为单位)转换为日期,而且从那天起我每周都会出错。这是我的代码 -

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

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

答案

LocalDate.ofEpochDay()希望将日计数作为其参数,并且您将传递第二个计数(这是将毫秒计数除以1000时得到的结果)。

另一答案

Answer by NPE是正确的。

Solution code example

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

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

Instant instant = Instant.ofEpochMilli( 1406865600000L );

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

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

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

要求周日。 Java代表enum DayOfWeek中每周七天的每一天。

DayOfWeek dow = zdt.getDayOfWeek();

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

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

转储到控制台。结果,至少对于America/Montreal,正如你所料,周一1月8日。

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

以上是关于从java时间api错误的一周的主要内容,如果未能解决你的问题,请参考以下文章

来自 HTML5 Intl API 的一周的第一天

片段不去活动 [Android]

卡住了从活动到片段的移植

为啥 date_format() 在 Pyspark 中返回错误的一周?

java.lang.IllegalStateException:片段未附加到活动

暑假第三周总结