LocalDateTime的长时间戳

时间:2017-07-03 10:35:25

标签: java java-8 timestamp java-time

我有一个很长的时间戳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());

5 个答案:

答案 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()