我有一个很长的时间戳1499070300(相当于周一,2017年7月3日16:25:00 +0800)但是当我将它转换为LocalDateTime时,我得到1970-01-18T16:24:30.300
这是我的代码
long test_timestamp = 1499070300;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
.getDefault().toZoneId());
答案 0 :(得分:48)
您需要以毫秒为单位传递时间戳:
long test_timestamp = 1499070300000L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp),
TimeZone.getDefault().toZoneId());
System.out.println(triggerTime);
结果:
2017-07-03T10:25
或者改为使用ofEpochSecond
:
long test_timestamp = 1499070300L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(test_timestamp),
TimeZone.getDefault().toZoneId());
System.out.println(triggerTime);
结果:
2017-07-03T10:25
答案 1 :(得分:3)
尝试使用Instant.ofEpochMilli()
或Instant.ofEpochSecond()
方法 -
long test_timestamp = 1499070300L;
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp ), TimeZone
.getDefault().toZoneId());
答案 2 :(得分:2)
尝试使用以下内容..
long test_timestamp = 1499070300000L;
LocalDateTime triggerTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
.getDefault().toZoneId());
默认情况下1499070300000
是int,如果它不包含l in end.Also传递时间(以毫秒为单位)。
答案 3 :(得分:2)
如果您正在使用Android Threeten后端口,那么您想要的行就是这个
LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault())
答案 4 :(得分:1)
您的问题是时间戳不是以毫秒为单位,而是以纪元日期为单位表示的秒数。将您的时间戳乘以1000或使用Instant.ofEpochSecond()
。