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()を使用する必要がある場合でも、うまくいきません。
どうですか:
Date expiry = new Date(Long.parseLong(date));
編集: rde617 の回答に従って、質問で指定された入力を詳しく見ると、「1081157732」は秒ベースのエポック値であるように見えるので、 parseLong()で1000ミリ秒に変換します。これはJavaのDateコンストラクターが使用するものです。
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 );
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" );
long timestamp = Long.parseLong(date)
Date expiry = new Date(timestamp * 1000)
さらに良いことに、 JodaTime を使用します。文字列を解析して文字列にするのがはるかに簡単です。スレッドセーフでもあります。それを実装するのにかかる時間に値する。
秒のタイムスタンプをミリ秒のタイムスタンプに変換します。 TimeUnit APIを使用して、このようにすっきりさせることができます。
long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)