문제

나는 그것을 포함하는 줄이있다 유닉스 에포크 시간, 그리고 나는 그것을 Java 날짜 개체로 변환해야합니다.

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 ()에서 1000에서 밀리 초로 변환하는 데 오랫동안 곱하는 것으로 보입니다. Java의 날짜 생성자가 사용하는 것 :

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

다른 팁

에포크는 수입니다 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]

이 경우 더 잘 사용해야합니다 ZonedDateTime 날짜로 표시합니다 UTC Epoch가 UTC에서 정의되어 있기 때문에 시간대 유닉스 시간 Java가 사용합니다.

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)

hum .... 내가 착각하지 않으면 유닉스 시대 시간은 실제로 같은 것입니다.

System.currentTimeMillis()

그래서 글쓰기

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

작동해야합니다 (그리고 날짜 파싱 날짜가 훨씬 빨라집니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top