SimpleDateFormatのガイド
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で入手]です。