1前書き

このチュートリアルでは、

__SimpleDateFormat

__class ** の詳細なツアーを行います。

  • 単純なインスタンス化


    と書式設定スタイル

    、およびクラスが

    ロケールとタイムゾーンの処理** のために公開する便利なメソッドを見てみましょう。

さて、始める前に、

__

SimpleDateFormatはスレッドセーフではないことを覚えておいてください。したがって、並行環境で適切な予防措置を講じることは開発者に任されています。


2単純なインスタンス化

まず、新しい

__SimpleDateFormat

__objectをインスタンス化する方法を見てみましょう。


https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#constructor


summary[4つの考えられるコンストラクタ]があります – しかし、名前に沿って、物事を単純にしましょう。開始する必要があるのは、




String


リンクの表現だけです。#date

time__patterns[日付パターン] 欲しい** 。

次のようにダッシュで区切られた日付パターンから始めましょう。

"dd-MM-yyyy"

これは、現在の月の日、現在の月、そして最後に現在の年から始まる日付を正しくフォーマットします。新しいフォーマッタを簡単なユニットテストでテストできます。新しい

__SimpleDateFormat

__objectをインスタンス化し、既知の日付を渡します。

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
assertEquals("24-05-1977", formatter.format(new Date(233345223232L)));

上記のコードでは、

formatter

はミリ秒を

__long

__intとして人間が読める日付(1977年5月24日)に変換します。

** 2.1. ファクトリーメソッド


SimpleDateFormat

は、日付フォーマッタをすばやく作成するのに便利なクラスですが、**

DateFormat

クラスのファクトリメソッドを使用することをお勧めします。

上記の例は、これらのファクトリメソッドを使用したときに少し違って見えます。

DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT);
assertEquals("5/24/77", formatter.format(new Date(233345223232L)));

上記からわかるように、フォーマットオプションの数は

__DateFormatのhttps://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#field

detail[fieldsによって事前に決定されています。

__クラス]。これは主に

利用可能なフォーマット設定オプションを

制限しているため、この記事では


SimpleDateFormat

__に固執することになります。


3解析日



_SimpleDateFormat





DateFormat


は日付のフォーマットを許可するだけではありません – しかし操作を逆にすることもできます。


parse


メソッドを使用して、日付の


String


representationを


入力し、それと同等の

Date _



オブジェクトを返すことができます。

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date myDate = new Date(233276400000L);
Date parsedDate = formatter.parse("24-05-1977");
assertEquals(myDate.getTime(), parsedDate.getTime());

ここで注意することは、コンストラクタで提供されるパターンは、

__parse

__メソッドを使用して解析された日付と同じ形式である必要があることです。

……
……


4日時パターン

____SimpleDateFormatは、日付をフォーマットするときにさまざまなオプションの膨大な配列を提供します。完全なリストはhttps://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html[JavaDocs]にありますが、より一般的に使用されるオプションをいくつか調べてみましょう。

| ======================= | |レター|日付コンポーネント|例| M |月| 12; 12月| y |年| 94 | d |日| 23;月| H |時| 03 | m |分| 57 | ===================================

日付コンポーネントによって返される

出力は、

String

内で使用される

文字数** に大きく依存します。たとえば、6月です。日付文字列を次のように定義したとします。

"MM"

その場合、結果は数値コード – 06として表示されます。ただし、日付文字列にさらにMを追加すると、次のようになります。

"MMM"

その結果、フォーマットされた日付が

Jun

という単語として表示されます。


5ロケールの適用


__SimpleDateFormat

__classは、

コンストラクタが呼び出されたときに設定される

広範囲のロケール** もサポートします。

フランス語で日付をフォーマットして、これを実践しましょう。コンストラクタに

__Locale.FRANCE


を供給しながら、


SimpleDateFormat

__オブジェクトをインスタンス化します。

SimpleDateFormat franceDateFormatter = new SimpleDateFormat("EEEEE dd-MMMMMMM-yyyy", Locale.FRANCE);
Date myWednesday = new Date(1539341312904L);
assertTrue(franceDateFormatter.format(myWednesday).startsWith("vendredi"));

水曜日の午後に指定された日付を指定することで、


_ franceDateFormatter


が日付を正しくフォーマットしていると主張できます。新しい日付は、水曜日の

Vendredi _

-Frenchで正しく始まります。


https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String、%20java.util.Locale)にちょっとした注意が必要ですロケールバージョンのコンストラクタ

] –

多くのロケールがサポートされていますが、完全なカバレッジは保証されていません

。ロケールの適用範囲を確実にするために、

__ DateFormat

__classのファクトリ・メソッドを使用することをお薦めします。


6. タイムゾーンの変更


__SimpleDateFormatは


DateFormatクラスを拡張するので、


setTimeZone

__method

を使用して

タイムゾーンを操作することもできます。これを実際に見てみましょう。

Date now = new Date();

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE dd-MMM-yy HH:mm:ssZ");

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/London"));
logger.info(simpleDateFormat.format(now));

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/New__York"));
logger.info(simpleDateFormat.format(now));

上記の例では、同じ

SimpleDateFormat

オブジェクトの2つの異なるタイムゾーンに同じ

__Dateを提供しています。タイムゾーンの違いを示すために、

String

というパターンの最後に** というZ文字を追加しました。


format

__methodからの出力は、ユーザーに対してログに記録されます。

実行を押すと、2つのタイムゾーンに対する現在の時刻がわかります。

INFO: Friday 12-Oct-18 12:46:14+0100
INFO: Friday 12-Oct-18 07:46:14-0400


7. 概要

このチュートリアルでは、

SimpleDateFormat

の複雑さについて詳しく説明しました。


SimpleDateFormat






インスタンス化する方法、および

pattern

__String

__が日付の書式設定方法にどのように影響するかを調べました

最後に、

タイムゾーンを使って

を試してみる前に、出力Stringの

ロケールを変更すること

を試しました。

いつものように完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java/src/test/java/com/baeldung/simpledateformat[Githubで入手]です。