我正在使用java 8时间API将时间(以毫秒为单位)转换为日期,而且从那天起我每周都会出错。 这是我的代码 -
long millis = 1406865600000L;
LocalDate localDate = LocalDate.ofEpochDay(millis/1000);
DayOfWeek dow = localDate.getDayOfWeek();
System.out.println(dow);
它打印出星期四,而这是星期五1月8日。
请帮忙。
答案 0 :(得分:2)
LocalDate.ofEpochDay()
期望天计数作为其参数,并且您传递第二个计数(这是将毫秒计数除以1000时得到的结果)。
答案 1 :(得分:2)
Answer by NPE是正确的。
这是正确处理这种情况的代码。
如果输入的数字是自UTC 1970年开始的纪元以来的毫秒数,那么请创建一个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
,正如您所期望的那样,周五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