java.util.Dateを文字列に変換する
1. 概要
このチュートリアルでは、JavaでDateオブジェクトをStringオブジェクトに変換する方法を示します。 そのために、古い java .util.Date タイプと、Java8で導入された新しいDate / TimeAPIを使用します。
逆の変換、つまりStringからDateタイプへの変換方法を知りたい場合は、このチュートリアルをここで確認できます。
新しい日付/時刻APIの詳細については、この関連チュートリアルを参照してください。
2. java.util.DateをStringに変換しています
Java 8を使用している場合は、 java .util.Date を使用するべきではありませんが、選択の余地がない場合があります(たとえば、 Date を受信している場合)。私たちの管理下にないライブラリからのオブジェクト)。
このような場合、java.util.DateをStringに自由に変換する方法がいくつかあります。
2.1. 日付オブジェクトの準備
まず、日付の予想される String 表現を宣言し、目的の日付形式のパターンを定義しましょう。
private static final String EXPECTED_STRING_DATE = "Aug 1, 2018 12:00 PM";
private static final String DATE_FORMAT = "MMM d, yyyy HH:mm a";
次に、変換する実際のDateオブジェクトが必要です。 Calendarインスタンスを使用して作成します。
TimeZone.setDefault(TimeZone.getTimeZone("CET"));
Calendar calendar = Calendar.getInstance();
calendar.set(2018, Calendar.AUGUST, 1, 12, 0);
Date date = calendar.getTime();
後で新しいAPIを使用する際の問題を防ぐために、デフォルトのTimeZoneをCETに設定しました。 日付自体にはタイムゾーンがありませんが、そのtoString()は現在のデフォルトのタイムゾーンを使用することに注意してください。
以下のすべての例では、このDateインスタンスを使用します。
2.2. SimpleDateFormatクラスの使用
この例では、 SimpleDateFormatクラスのformat()メソッドを使用します。 日付形式を使用して、そのインスタンスを作成しましょう。
DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
この後、日付をフォーマットして、期待される出力と比較できます。
String formattedDate = formatter.format(date);
assertEquals(EXPECTED_STRING_DATE, formattedDate);
2.3. 抽象DateFormatクラスの使用
ご覧のとおり、SimpleDateFormatは抽象DateFormatクラスのサブクラスです。 このクラスは、日付と時刻をフォーマットするためのさまざまなメソッドを提供します。
これを使用して、上記と同じ出力を実現します。
String formattedDate = DateFormat
.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT)
.format(date);
このアプローチでは、スタイルパターンを渡します。この場合、日付には MEDIUM 、時刻にはSHORTを渡します。
3. フォーマッタークラスの使用
前の例と同じStringを取得する別の簡単な方法は、Formatterクラスを使用することです。
これは最も読みやすいソリューションではないかもしれませんが、これはスレッドセーフなワンライナーであり、特にマルチスレッド環境で役立つ可能性があります(SimpleDateFormatに注意する必要があります]はスレッドセーフではありません):
String formattedDate = String.format("%1$tb %1$te, %1$tY %1$tI:%1$tM %1$Tp", date);
1 $ を使用して、すべてのフラグで使用される引数を1つだけ渡すことを示しました。 フラグの詳細な説明は、FormatterクラスのDate/ Time Conversionspartにあります。
4. Java8日付/時刻APIを使用した変換
Java8のDate/ Time APIは、java.util.Dateおよびjava.util.Calendarクラスよりもはるかに強力であり、これを使用する必要があります。いつでも可能なとき。 既存のDateオブジェクトをStringに変換するために使用する方法を見てみましょう。
今回は、 DateTimeFormatter クラスとそのformat()メソッド、およびセクション2.1で宣言された同じ日付パターンを使用します。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT);
新しいAPIを使用するには、DateオブジェクトをInstantオブジェクトに変換する必要があります:
Instant instant = date.toInstant();
予想されるStringには日付と時刻の両方の部分があるため、InstantオブジェクトをLocalDateTime:に変換する必要もあります。
LocalDateTime ldt = instant
.atZone(ZoneId.of("CET"))
.toLocalDateTime();
そして最後に、フォーマットされたStringを簡単に取得できます。
String formattedDate = ldt.format(formatter);
5. 結論
この記事では、java.util.DateオブジェクトをStringに変換するいくつかの方法を説明しました。 最初に、古いjava.util.Dateおよびjava.util.Calendarクラスと対応する日付フォーマットクラスを使用してこれを行う方法を示しました。
次に、 Formatter クラスを使用し、最後にJava 8 Date /TimeAPIを使用しました。
いつものように、完全なソースコードはGitHubのにあります。