Java Date 객체에 대한 Unix epoch 시간


84

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 ()을 사용해야하는지 알 수 없습니다.


Joda-Time 라이브러리를 사용하여 예제 코드를 사용하여 밀리 초를 날짜-시간으로 변환하는 것과 관련된 유사한 질문에 대한 자세한 답변 을 참조하십시오 .
Basil Bourque

private String getDateString(long timeInMilliseconds) { SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy 'at' HH:mm:ss z"); return formatter.format(timeInMilliseconds); }
JVJplus

답변:


125

그냥 어때 :

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

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

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

4
윤초를 고려하지 않기 때문에 기술적으로 올바르지 않습니까?
Maciej Piechotka

1
Maciej, op의 "초 기반"epoch는 이미 윤초를 설명하며 "초"기반입니다. 그래서이 대답은 맞습니다.
thecarpy

1
1000을 곱하면 잘못된 값이 표시됩니다. 더 좋은 방법이 있습니까?
Ishaan

1
참고로, 같은 몹시 귀찮은 된 날짜 - 시간 수업 java.util.Date, java.util.Calendar그리고 java.text.SimpleDateFormat지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque

질문은 날짜가 GMT에서 긴 시간을 예상하는 동안 UTC 인 epoch 이후로 동일합니까?
Luke

37

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

그래서:

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

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


1
이것은이이 :) 대답으로 확인되지 않은 Y를 IDK ... 치료를 작동
Makky

이 답변에 감사드립니다. 나는 한 시대의 날짜를 인스턴스화하려고 여기에 앉아 있었고 그 결과는 항상 1970 년 어느 날이었고, 그것은 내가 모르는 사이에 초가 아닌 자바 밀리 초를 주었기 때문이었습니다. :)
Lo-Tan

24

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" );

좋은 대답입니다. 나는 드롭을 제안 LocalDateTime하고 ZonedDateTime. 대부분의 비즈니스 앱 ZonedDateTime에서 가장 좋은 방법입니다. 사람들은 LocalXXX유형에 따라 문제 / 혼란에 빠지는 경향이 있습니다.
Basil Bourque 2015

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


0

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

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)


-1

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

System.currentTimeMillis()

그래서 쓰기

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

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


4
일반적으로 Unix epoch 시간은 밀리 초가 아닌 초 단위로 측정됩니다.
Simon Nickerson 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.