UTC の日付/時刻 (文字列) をもっと読みやすい形式に解析するにはどうすればよいでしょうか? 質問する

UTC の日付/時刻 (文字列) をもっと読みやすい形式に解析するにはどうすればよいでしょうか? 質問する

次のような日付と時刻の文字列があります:2011-04-15T20:08:18Z日付/時刻の形式についてはあまり詳しくありませんが、間違っていたら訂正していただければ、これが UTC 形式だと思います。

質問です: Java でこれをより通常の形式に解析する最も簡単な方法は何ですか?

ベストアンサー1

要約

String output = 
    Instant.parse ( "2011-04-15T20:08:18Z" )
           .atZone ( ZoneId.of ( "America/Montreal" ) )
           .format ( 
               DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL )
                                .withLocale ( Locale.CANADA_FRENCH ) 
           )
;

2011 年 4 月 15 日金曜日 16:08 EDT

詳細

ジョシュ・ピンターの回答正しいですが、さらに簡単にすることもできます。

java.time

Java 8以降では、バンドルされているjava.util.Date/Calendarクラスは、JSR310これらのクラスは、ジョダタイムただし、完全に再設計されています。

java.timeフレームワークはJoda-Timeの公式後継です。Joda-Timeの開発者は、できるだけ早くjava.timeに移行するようアドバイスしています。Joda-Timeは引き続き更新と調整が行われていますが、さらなる革新はjava.timeとその拡張機能でのみ行われます。スリーテンエクストラプロジェクト。

java.time機能の大部分はJava 6と7にバックポートされました。スリーテンバックポートプロジェクトは、Android向けにさらに適応され、スリーテンABPプロジェクト。

上記のJoda-Timeコードと同等のものは非常に似ています。概念は似ています。そしてJoda-Timeと同様に、java.timeクラスはデフォルトで8601 規格日時値のテキスト表現を解析/生成する際の形式。

アンInstantタイムライン上の瞬間UTC決議によりナノ秒(対ミリ秒Joda-Time と java.util.Date によって使用されます。

Instant instant = Instant.parse( "2011-04-15T20:08:18Z" );

タイムゾーンを適用する(ZoneId)を取得するにはZonedDateTime

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

さらに別のタイムゾーンに調整します。

ZoneId zoneId_NewYork = ZoneId.of( "America/New_York" );
ZonedDateTime zdt_NewYork = zdt.withZoneSameInstant( zoneId_NewYork );

メソッド以外の形式で文字列を作成するにはtoStringjava.time.formatクラス。独自のフォーマットパターンを指定するか、java.timeが自動的にローカライズするようにすることができます。Locale(a) 月名や曜日名の翻訳に使用される人間の言語、および (b) ピリオドとカンマ、部分の順序などの文化的規範。

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

2011年4月15日金曜日午後4時8分18秒 EDT


についてjava.time

java.timeフレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い遺産日付と時刻のクラスjava.util.DateCalendar、&SimpleDateFormat

ジョダタイムプロジェクト、現在メンテナンスモード、への移行を勧めているjava.timeクラス。

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

交換できますjava.timeオブジェクトをデータベースに直接接続します。JDBC ドライバー準拠JDBC 4.2またはそれ以降。文字列もクラスも必要ありませんjava.sql.*

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

スリーテンエクストラプロジェクトは、java.time に追加のクラスを追加して拡張します。このプロジェクトは、java.time に将来追加される可能性のある機能の実証の場です。ここでは、次のような便利なクラスが見つかるかもしれません。IntervalYearWeekYearQuarter、 そしてもっと


ジョダタイム

アップデート:ジョダタイムプロジェクトは現在メンテナンスモードチームは、java.timeクラス。このセクションは履歴のためにそのまま残されています。

コンストラクタに文字列を渡す

ジョダタイムその文字列を直接受け取ることができます。日付時刻クラス。

Joda-Timeは標準を理解しているISO 8601 形式日付と時刻の形式を指定し、その形式をデフォルトとして使用します。

サンプルコード

以下は、Mac 上の Java 7 で実行されている Joda-Time 2.3 のコード例です。

DateTime コンストラクターに文字列を渡す方法を、タイム ゾーンありとなしの 2 つの方法で示します。タイム ゾーンを指定すると、日付と時刻の作業で発生する多くの問題が解決されます。指定しない場合は、デフォルトのタイム ゾーンが使用され、本番環境に導入したときに予期しない結果が生じる可能性があります。

また、タイムゾーンオフセットを指定しない方法も示します(UTC組み込み定数を使用して、GMTのタイム ゾーン (00:00) を指定します。末尾の (time の略)DateTimeZone.UTCは、タイム ゾーンのオフセットなし (00:00) を意味します。ZZulu

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

// Default time zone.
DateTime dateTime = new DateTime( "2011-04-15T20:08:18Z" );

// Specified time zone.
DateTime dateTimeInKolkata = new DateTime( "2011-04-15T20:08:18Z", DateTimeZone.forID( "Asia/Kolkata" ) );
DateTime dateTimeInNewYork = new DateTime( "2011-04-15T20:08:18Z", DateTimeZone.forID( "America/New_York" ) );

// In UTC/GMT (no time zone offset).
DateTime dateTimeUtc = dateTimeInKolkata.toDateTime( DateTimeZone.UTC );

// Output in localized format.
DateTimeFormatter formatter = DateTimeFormat.shortDateTime().withLocale( Locale.US );
String output_US = formatter.print( dateTimeInNewYork );

コンソールにダンプします…

System.out.println("dateTime: " + dateTime );
System.out.println("dateTimeInKolkata: " + dateTimeInKolkata );
System.out.println("dateTimeInNewYork: " + dateTimeInNewYork );
System.out.println("dateTimeUtc: " + dateTimeUtc );
System.out.println("dateTime in US format: " + output_US );

実行すると…

dateTime: 2011-04-15T13:08:18.000-07:00
dateTimeInKolkata: 2011-04-16T01:38:18.000+05:30
dateTimeInNewYork: 2011-04-15T16:08:18.000-04:00
dateTimeUtc: 2011-04-15T20:08:18.000Z
dateTime in US format: 4/15/11 4:08 PM

おすすめ記事