[java] Java Date 객체에 대한 Unix epoch 시간

UNIX Epoch 시간이 포함 된 문자열이 있는데 이를 Java Date 객체로 변환해야합니다.

String date = "1081157732";
DateFormat df = new SimpleDateFormat(""); // This line
try {
  Date expiry = df.parse(date);
 } catch (ParseException ex) {
  ex.getStackTrace();
}

표시된 선은 내가 문제가있는 곳입니다. SimpleDateFormat ()에 대한 인수가 무엇이어야하는지 또는 SimpleDateFormat ()을 사용해야하는지 알 수 없습니다.



답변

그냥 어때 :

Date expiry = new Date(Long.parseLong(date));

편집 : rde6173 의 답변에 따라 질문에 지정된 입력을 자세히 살펴보면 “1081157732”는 초 기반 epoch 값으로 표시되므로 parseLong ()의 long에 1000을 곱하여 변환하고 싶습니다. Java의 Date 생성자가 사용하는 밀리 초로,

Date expiry = new Date(Long.parseLong(date) * 1000);


답변

Epoch는 1970 년 1 월 1 일 이후 의 초입니다 .

그래서:

String epochString = "1081157732";
long epoch = Long.parseLong( epochString );
Date expiry = new Date( epoch * 1000 );

자세한 정보 :
http://www.epochconverter.com/


답변

java.time

java.timeJava 8 이상에 내장 된 프레임 워크를 사용합니다 .

import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;

long epoch = Long.parseLong("1081157732");
Instant instant = Instant.ofEpochSecond(epoch);
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC]

이 경우 Epoch는 Java에서 사용하는 Unix 시간의 UTC로 정의되므로 UTC 시간대의 ZonedDateTime날짜로 표시하는 것이 좋습니다 .

ZoneOffset위의 마지막 줄에서 볼 수 있듯이 UTC 시간대에 대한 편리한 상수를 포함합니다. 수퍼 클래스 ZoneId는 다른 시간대로 조정하는 데 사용할 수 있습니다.

ZoneId zoneId = ZoneId.of( "America/Montreal" );


답변

long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)


답변

더 나은 방법은 JodaTime을 사용하는 것 입니다. 문자열과 문자열로 구문 분석하기가 훨씬 쉽습니다. 스레드도 안전합니다. 구현하는 데 시간이 걸릴 가치가 있습니다.


답변

초 타임 스탬프를 밀리 초 타임 스탬프로 변환합니다. TimeUnit API를 사용하면 이렇게 깔끔하게 정리할 수 있습니다.

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)


답변

흠 …. 내가 착각하지 않았다면 UNIX Epoch 시간은 실제로

System.currentTimeMillis()

그래서 쓰기

try {
    Date expiry = new Date(Long.parseLong(date));
}
catch(NumberFormatException e) {
    // ...
}

작동해야합니다 (날짜 구문 분석이 훨씬 빠름)