2017-02-13 17 views
-1

LocalDateを使用して、文字列の日付を「20160101」から「January 1,2016」に変更する必要があります。 は今、私のコードは次のようになります。JavaでLocalDateを使用して文字列を変更する

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; 
LocalDate date = LocalDate.parse("20120403", formatter); 
System.out.println(date); 

出力は、次のとおりです。2016年1月1日

私はDateTimeFormatterBuilderはそれを行うために使用する必要がある、または簡単な方法はありますか? ありがとうございました!

+1

https://docs.oracle.com/javase/tutorial/datetime/iso /format.html – shmosel

答えて

1

ビルダーを使用する必要はありません。 DateTimeFormatterは文字列から直接作成することができますhere

1

LocalDate#toStringメソッドは、日付をISO-8601形式のuuuu-MM-ddで出力します。だからあなたの出力は2016-01-01となっています。代わりに "January 1,2016"形式の出力が必要な場合は、日付をMMM d, yyyy形式に再度フォーマットする必要があります。

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; 
LocalDate date = LocalDate.parse("20120403", formatter); 
String strDate = date.format(DateTimeFormatter.ofPattern("MMM d, yyyy")); 
System.out.println(strDate); 
+0

ご協力いただきありがとうございます。 – Ahab

+0

Stringとして返すことはできません。 LocalDateとして返す必要があります。私がそれをテストしたかったからです。 – Ahab

+0

この場合、LocalDateオブジェクトが既に存在します。 'date'オブジェクトは実際にはLocalDateオブジェクトです。何が問題なの?> – VHS

0

日付時刻オブジェクトは

あなたのご意見は、あなたがそれらの値を表す文字列を日付時刻オブジェクトをconflatingしていることを示している何の形式を持っていません。

日時オブジェクトにはフォーマットがありません。オブジェクトは文字列を生成してその値を表すことができますが、このような文字列は区別されています。同様に、文字列を解析することによって日付/時刻オブジェクトをインスタンス化することもできますが、新しい日付オブジェクトは区別され、分離されます。

あなたが特定の書式パターンを指定Answer by VHSに示すように、あなたは文字列を生成することができます

のローカライズ。しかし、一般的に、より良い方法は、java.timeを自動的にローカライズすることです。

  • FormatStyle文字列がどのくらいか、省略をする必要があります決定するために:、ローカライズ指定するには

  • Locale(a)日の名前、月の名前などの翻訳のための人間言語、および(b)略語、大文字小文字、句読点、区切り記号などの問題を決定する文化的な基準を決定する。

例:

Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.ITALY, etc. 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(l); 
String output = myLocalDate.format(f); 

DateTimeFormatterBuilderクラスは、特別なニーズのためです。一般に必要なのは、DateTimeFormatterクラスです。

code run live at IdeOne.comを参照してください。しかし、IdeOne.com WebサイトのJavaの実装には制限があります。代替ロケールは無視され、単一の英語ロケール(おそらくLocale.US)にハードコードされます。

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; 
LocalDate localDate = LocalDate.parse("20120403", formatter); 

String outputStandard = localDate.toString(); 

DateTimeFormatter fCanadaFrench = 
    DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG) 
        .withLocale(Locale.CANADA_FRENCH) ; 
String outputCanadaFrench = localDate.format(fCanadaFrench) ; 

DateTimeFormatter fUS = 
    DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG) 
        .withLocale(Locale.US) ; 
String outputUS = localDate.format(fUS) ; 

LOCALDATE。toString():2012-04-03

outputCanadaFrench:3アヴリル2012

outputUS:2012年4月3日

関連する問題