1970年1月1日UTC(エポック時間)からの秒数があります。
1320105600
その秒を以下の形式で日付と時刻に変換する必要があります。
2011年11月4日金曜日午前5:00
どうすればこれを達成できますか?
従来の_Java.util.Date
_および_Java.util.Calendar
_ APIに制限されている場合は、タイムスタンプが秒ではなくミリ秒で解釈されることを考慮する必要があります。したがって、タイムスタンプをミリ秒単位で取得するには、最初に1000を掛ける必要があります。
_long seconds = 1320105600;
long millis = seconds * 1000;
_
この方法で、a.oにフィードできます。 _Java.util.Date
_ のコンストラクターで、最後に SimpleDateFormat
を使用して、希望する日付形式で_Java.util.Date
_を_Java.lang.String
_に変換します必要に応じて、事前に定義されたタイムゾーンを使用したパターン(そうでない場合は、システム デフォルトのタイムゾーン を使用します。
_Date date = new Date(millis);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM
_
すでにJava8を使用している場合は、 LocalDateTime#ofEpochSecond()
があり、ミリ秒フレーバーに乗算する必要なく、エポック秒を直接フィードできます。
_LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM
_
long yourSeconds = 1320105600L;
Date d = new Date(yourSeconds * 1000);
詳細は javadoc をご覧ください。コンストラクタにはミリ秒が必要です。
この日付を適切な形式で表示するには、 DateFormat を確認する必要があります
次に例を示します。
DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(df.format(date));
BalusCによる回答 は、Java.timeの使用を示す点で優れています。しかし、そのAnswerは LocalDateTime
を使用します。ここで Instant
がより適切です。 LocalDateTime
は、notであり、意図的に offset-from-UTC または タイムゾーン 。
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、_Java.util.Date
_、_.Calendar
_、&_Java.text.SimpleDateFormat
_。 Joda-Time チームは、Java.timeへの移行も推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。
Java.time機能の多くは、Java 6&7 in ThreeTen-Backport にバックポートされ、さらにAndroid in ThreeTenABP 。
Instant
[〜#〜] utc [〜#〜] のタイムライン上の瞬間が nanoseconds までの解像度で Instant
クラス。
_Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );
_
コンソールにダンプします。入力値は、2011年11月1日 [〜#〜] utc [〜#〜] の最初の瞬間です。末尾のZ
は、 'Zulu'の略で、UTCを意味します。
_System.out.println ( "instant: " + instant );
_
インスタント:2011-11-01T00:00:00Z
ZonedDateTime
あなたのコメントの中で、あなたは _America/Chicago
_ タイムゾーンのレンズを通してこの日時を見たいと述べています。 適切なタイムゾーン名 を使用します。タイムゾーンZoneId
を適用して、ZonedDateTime
オブジェクトを取得します。シカゴはその日付のUTCから5時間遅れていることがわかります。
_ZoneId zoneId = ZoneId.of ( "America/Chicago" );
ZonedDateTime zdt = instant.atZone ( zoneId );
_
zdt:2011-10-31T19:00-05:00 [アメリカ/シカゴ]
上記の文字列は、標準の ISO 8601 形式です。他の形式の文字列を生成するには、 DateTimeFormatter
クラスを使用します。独自のカスタムパターンを指定できます。しかし、一般的には、Java.timeが Locale
オブジェクトでエンコードされた人間の言語と文化的規範に自動的にローカライズできるようにすることが最善です。
_DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );
_
2011年10月31日月曜日7:00:00 PM CDT
独自のカスタム形式を指定するには、Stack Overflowで多くの例と詳細な説明を検索してください。
int seconds = 1320105600;
Date date = new Date(seconds * 1000);
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a");
System.out.println(sdf.format(date));
トリックは、Java.util.Date
とJava.text.DateFormat
を使用して、必要な形式を取得することです。 Webのチュートリアル でその方法を調べることができます。