【问题标题】:Java 8 LocalDate from long to date not converted correct从长到日期的 Java 8 LocalDate 未正确转换
【发布时间】:2017-11-30 06:45:39
【问题描述】:
我想以毫秒为单位将日期转换为日期,但转换不正确。
public static void main(String[] args) {
LocalDate today = LocalDateTime.now().toLocalDate();
System.out.println("Today: ----------" + today);
long todayLong = today.atStartOfDay(ZoneId.systemDefault()).toEpochSecond();
System.out.println("todayLong: ---------- " + todayLong);
LocalDate todayBack = Instant.ofEpochMilli(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- "+todayBack);
}
这是输出:
今天:----------2017-06-27
todayLong: ---------- 1498507200
todayBack: ---------- 1970-01-18
【问题讨论】:
标签:
java
date
localdate
zoneddatetime
【解决方案1】:
您需要使用ofEpochSecond 而不是ofEpochMilli,因为您的todayLong 是second,而不是milisecond
LocalDate todayBack = Instant.ofEpochSecond(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
【解决方案2】:
你在第 6 行有一个小错误 (Instant.ofEpochMilli)。
请改用Instant.ofEpochSecond:
LocalDate today = LocalDateTime.now().toLocalDate();
System.out.println("Today: ----------" + today);
long todayLong = today.atStartOfDay(ZoneId.systemDefault()).toEpochSecond();
System.out.println("todayLong: ---------- " + todayLong);
LocalDate todayBack = Instant.ofEpochSecond(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- " + todayBack);
【解决方案3】:
你必须将 todayLong 乘以 1000
LocalDate todayBack = Instant.ofEpochMilli(todayLong * 1000).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- " + todayBack);
获取输出:
今天:----------2017-06-27
todayLong: ---------- 1498514400
todayBack: ---------- 2017-06-27