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.time
Java 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) {
// ...
}
작동해야합니다 (날짜 구문 분석이 훨씬 빠름)