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