javaでunixのタイムスタンプから分を日付と時間に変換するにはどうしたらいいですか?例えば、タイムスタンプ 1372339860
は Thu, 27 Jun 2013 13:31:00 GMT
に相当します。
私は1372339860
を2013-06-27 13:31:00 GMT
に変換したいのです。
編集 : 実際には、米国のタイミングGMT-4に合わせたいので、2013-06-27 09:31:00
となります。
SimlpeDateFormatを使って、以下のように日付をフォーマットすることができます。
long unixSeconds = 1372339860;
// convert seconds to milliseconds
Date date = new java.util.Date(unixSeconds*1000L);
// the format of your date
SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
// give a timezone reference for formatting (see comment at the bottom)
sdf.setTimeZone(java.util.TimeZone.getTimeZone("GMT-4"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate);
SimpleDateFormatが取るパターンは非常に柔軟で、特定の
Date`を与えて書いたパターンに基づいて異なるフォーマットを作成するために使用できるすべてのバリエーションをjavadocsで確認することができます。 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
は EPOC からのミリ秒を返す
getTime()メソッドを提供しているので、タイムゾーンに応じて適切に日付をフォーマットするために、
SimpleDateFormat` にタイムゾーンを与えることが必要です。そうしないと、JVM のデフォルトのタイムゾーンが使用されます (うまく設定されていれば、いずれにせよ正しい)。Java 8では、UnixのタイムスタンプからInstant`を作成するInstant.ofEpochSecond`というユーティリティメソッドが導入されました。
final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
final long unixTime = 1372339860;
final String formattedDtm = Instant.ofEpochSecond(unixTime)
.atZone(ZoneId.of("GMT-4"))
.format(formatter);
System.out.println(formattedDtm); // => '2013-06-27 09:31:00'
これはJava 8を使っている人には便利かもしれませんね。