Java >> Java チュートリアル >  >> Java

JavaでcurrentTimeMillisを日付に変換するには?

java.util.Date を使用できます クラスを作成し、SimpleDateFormat を使用します Date をフォーマットするには .

Date date=new Date(millis);

java.time パッケージ (チュートリアル) - Java SE 8 で導入された DateTime API を使用できます。

var instance = java.time.Instant.ofEpochMilli(millis);
var localDateTime = java.time.LocalDateTime
                        .ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata"));
var zonedDateTime = java.time.ZonedDateTime
                            .ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));

// Format the date

var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O");
var string = zonedDateTime.format(formatter);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);

int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);

tl;dr

Instant.ofEpochMilli( 1_322_018_752_992L )     // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
       .atZone( ZoneId.of( "Africa/Tunis" ) )  // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.

詳細

他の回答では、時代遅れまたは不適切なクラスが使用されています。

java.util.Date/.Calendar などの古い日時クラスは使用しないでください。それらは設計が不十分で、混乱を招き、面倒であることが証明されています。

java.time

java.time フレームワークは、Java 8 以降に組み込まれています。機能の多くは Java 6 および 7 にバックポートされ、さらに Android に適合されています。 Joda-Time を作成したのと同じ人々によって作成されました。

Instant ナノ秒の分解能を持つ UTC のタイムライン上の瞬間です。そのエポックは UTC で 1970 年の最初の瞬間です。

入力データが 1970-01-01T00:00:00Z からのミリ秒数であると仮定すると (質問では明確ではありません)、Instant を簡単にインスタンス化できます。 .

Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );

インスタント.toString():2011-11-23T03:25:52.992Z

Z その標準 ISO 8601 形式の文字列は Zulu の略です とは UTC を意味します。

ZonedDateTime を取得するには、適切なタイム ゾーン名を使用してタイム ゾーンを適用します。 .

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );

このコードの実行を IdeOne.com でライブで確認してください。

Asia/Kolkata タイムゾーン?

コードに影響を与えるインドのタイムゾーンがあったと思います。 Asia/Kolkata に調整されていることがわかります タイムゾーンは、レポートと同じ時刻をレンダリングします 08:55 これは、UTC 値 03:25 より 5 時間半進んでいます .

2011-11-23T08:55:52.992+05:30[アジア/コルカタ]

デフォルト ゾーン

JVM の現在のデフォルトのタイム ゾーンを適用できます。 実行中にいつでもデフォルトが変更される可能性があることに注意してください . JVM 内の任意のアプリの任意のスレッド内の任意のコードで、現在のデフォルトを変更できます。重要な場合は、希望する/予想されるタイムゾーンをユーザーに尋ねてください。

ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

java.time について

java.time フレームワークは Java 8 以降に組み込まれています。これらのクラスは、java.util.Date などの面倒な古いレガシー日時クラスに取って代わります。 、 Calendar 、 &SimpleDateFormat .

Joda-Time 現在メンテナンス モードになっているプロジェクトは、java.time クラスへの移行を推奨しています。

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

JDBC 4.2 以降に準拠する JDBC ドライバーを使用すると、java.time を交換できます。 オブジェクトをデータベースに直接送信します。文字列や java.sql.* クラスは不要です。

java.time クラスはどこで入手できますか?

  • Java SE 8Java SE 9 、以降
    • 組み込み。
    • 実装がバンドルされた標準 Java API の一部です。
    • Java 9 にはいくつかのマイナーな機能と修正が追加されています。
  • Java SE 6 および Java SE 7
    • java.time 機能の多くは、ThreeTen-Backport で Java 6 &7 にバックポートされています。 .
  • アンドロイド
    • Android の新しいバージョンでは、java.time クラスの実装がバンドルされています。
    • 以前の Android の場合、ThreeTenABP プロジェクトは ThreeTen-Backport を適応させます (上記の通り)。 ThreeTenABP の使用方法を参照してください。 .

スリーテン エクストラ プロジェクトは、追加のクラスで java.time を拡張します。このプロジェクトは、java.time. Interval などの便利なクラスがここにあります。 、 YearWeekYearQuarter 、その他。


Java タグ