web-dev-qa-db-ja.com

LocalDateTimeへの長いタイムスタンプ

長いタイムスタンプ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());
34
rhandom

タイムスタンプをミリ秒単位で渡す必要があります。

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
51
Juan

Instant.ofEpochMilli() またはInstant.ofEpochSecond()メソッドで試してください-

long test_timestamp = 1499070300L;
LocalDateTime date =
    LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp ), TimeZone
        .getDefault().toZoneId());
3
Razib

以下で試してください。

long test_timestamp = 1499070300000L;
    LocalDateTime triggerTime =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(test_timestamp), TimeZone
                    .getDefault().toZoneId());  

デフォルトでは、1499070300000は、末尾にlが含まれていない場合はintです。また、ミリ秒単位で時間を渡します。

2
Akshay

あなたの問題は、タイムスタンプがミリ秒単位ではなく、エポック日付からの秒単位で表されることです。タイムスタンプを1000倍するか、Instant.ofEpochSecond()を使用します。

1
Alex Roig