27

1970年1月1日UTC(エポック時間)から数秒あります。

1320105600

その秒を以下の形式の日付と時刻に変換する必要があります。

2011年11月4日金曜日5:00AM

どうすればこれを達成できますか?

4

5 に答える 5

44

java.util.DateレガシーとAPIに制限されている場合はjava.util.Calendar、タイムスタンプが秒ではなくミリ秒で解釈されることを考慮する必要があります。したがって、最初に1000を掛けて、ミリ秒単位のタイムスタンプを取得する必要があります。

long seconds = 1320105600;
long millis = seconds * 1000;

このようにして、のコンストラクターにフィードしjava.util.Date、最後にを使用して、必要に応じて事前定義されたタイムゾーンで希望の日付形式パターンにSimpleDateFormat変換できます(そうでない場合は、システムのデフォルトのタイムゾーンを使用します。これはGMT/UTCではありません。したがって、フォーマットされた時刻がずれている可能性があります)。java.util.Datejava.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

すでにJava8LocalDateTime#ofEpochSecond()を使用している場合は、ミリ秒フレーバーに乗算することなく、エポック秒を直接フィードできるaがあります。

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
于 2011-11-24T20:52:13.767 に答える
16
long yourSeconds = 1320105600L;
Date date = new Date(yourSeconds * 1000);

詳細については、このjavadocを参照してください。コンストラクターにはミリ秒が必要です。

この日付を適切な形式で表示するには、DateFormatを確認する必要があります

次に例を示します。

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(df.format(date));
于 2011-11-24T20:51:00.430 に答える
10

java.time

BalusC による回答は、java.timeの使用を示しているという点で優れています。しかし、その回答では、より適切なLocalDateTime場所を使用しています。InstantALocalDateTimeは、意図的にUTC からのオフセットタイム ゾーンの概念がないため、タイムライン上の瞬間ではありません

java.time

java.timeフレームワークは、Java 8 以降に組み込まれています。java.util.Dateこれらのクラスは、 、.Calendar、 &などの古い面倒な日時クラスに取って代わりますjava.text.SimpleDateFormat。Joda -Timeチームは、java.time への移行についてもアドバイスしています。

詳細については、 Oracle チュートリアルを参照してください。また、Stack Overflow で多くの例と説明を検索してください。

java.time 機能の多くは、ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPで Android に適合されています。

Instant

ナノ秒までの解像度を持つUTCのタイムライン上の瞬間は、クラスによって表されます。Instant

Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );

コンソールにダンプします。入力値は、UTCで 2011 年 11 月 1 日の最初の瞬間です。末尾の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クラスを使用します。独自のカスタム パターンを指定できます。Localeしかし、一般的には、オブジェクトにエンコードされた人間の言語と文化的規範に java.time を自動的にローカライズさせるのが最善です。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );

2011 年 10 月 31 日月曜日午後 7:00:00 CDT

独自のカスタム形式を指定するには、スタック オーバーフローで多くの例と詳細な説明を検索してください。

于 2016-07-24T00:07:27.247 に答える
2
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));
于 2011-11-24T20:52:14.670 に答える
0

秘訣は、使用java.util.Datejava.text.DateFormatて、必要な形式を取得することです。Web上のチュートリアルでその方法を調べることができます。

于 2011-11-24T20:50:28.013 に答える