web-dev-qa-db-ja.com

Unixエポック時間Java Dateオブジェクト

NIXエポック時間 を含む文字列があり、それをJava Dateオブジェクトに変換する必要があります。

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

マークされた行は、問題が発生している場所です。 SimpleDateFormat()の引数がどうあるべきか、またはSimpleDateFormat()を使用する必要がある場合でも、うまくいきません。

71
Xenph Yan

どうですか:

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

編集: rde617 の回答に従って、質問で指定された入力を詳しく見ると、「1081157732」は秒ベースのエポック値であるように見えるので、 parseLong()で1000ミリ秒に変換します。これはJavaのDateコンストラクターが使用するものです。

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

エポックは  1970年1月1日から。

そう:

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

詳細: http://www.epochconverter.com/

35
Ryan Emerle

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 [〜#〜] タイムゾーンで日付としてマークする方が適切です。 UTCで nix時間 Javaで使用されます。

ZoneOffset は、上の最後の行に見られるように、UTCタイムゾーンの便利な定数を含んでいます。そのスーパークラス ZoneId を使用して、他のタイムゾーンに合わせることができます。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
18
Przemek
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
6
tcurdt

さらに良いことに、 JodaTime を使用します。文字列を解析して文字列にするのがはるかに簡単です。スレッドセーフでもあります。それを実装するのにかかる時間に値する。

0
WolfmanDragon

秒のタイムスタンプをミリ秒のタイムスタンプに変換します。 TimeUnit APIを使用して、このようにすっきりさせることができます。

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

0