2009-08-27 20 views
19

LocaleDateFormatを検索するにはどうすればよいですか?例えばロケールのJava日付書式

+0

、[java.time](HTTPSに取って代わられ、このような 'DateFormat'は今[レガシー](https://en.wikipedia.org/wiki/Legacy_system)などの面倒な古い日付時刻クラス、:/ /docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)のクラスを参照してください。 [Tutorial by Oracle](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)を参照してください。 –

答えて

25
DateFormat.getDateInstance(int,Locale) 

import static java.text.DateFormat.*; 

DateFormat f = getDateInstance(SHORT, Locale.ENGLISH); 

が次にあなたが形式にこのオブジェクトを使用することができますDate S:

String d = f.format(new Date()); 

あなたが実際に下地パターンを知りたい場合は、(例えばyyyy-MMM-dd)、 SimpleDateFormatオブジェクトを取得すると、

SimpleDateFormat sf = (SimpleDateFormat) f; 
String p1 = sf.toPattern(); 
String p2 = sf.toLocalizedPattern(); 
+1

私はDateFormat.getDateInstance(...は)のSimpleDateFormatオブジェクトを返すという保証はないと思いますので、SimpleDateFormatのに結果をキャストすると、それは、Sunの実装よりもジャワの別の実装では動作しない場合があります、またはそれは可能性があります(危険かもしれませんSunの実装とは異なるバージョンでも動作しません)。 – Jesper

+1

これは非常に真実です。保証はありません。しかし、それは、実際FYI –

+0

で 'SimpleDateFormat'、こうした' java.text.SimpleDateFormat'は今[レガシー](https://en.wikipedia.org/wiki/Legacy_system)などの面倒な古い日付時刻クラスになります[java.time(https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)クラスによって取って代わら。 [Tutorial by Oracle](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)を参照してください。 –

-1

SimpleDateFormatキャストを使用せずに、指定されたLocaleオブジェクトのデフォルトパターンを取得する方法はありますか?

Related theme.

+1

あなたが質問をするか、コメント欄に質問をする必要がある場合は、新しいポストを作成します。これらは、元の投稿への回答のために予約されています。 – hfontanez

1

TL; DR

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL) 
       .withLocale(Locale.CANADA_FRENCH); 

java.time

元の日付・時間クラスは現在、レガシーであり、java.timeクラスに取って代わられています。

DateTimeFormatterには、日付時刻の値を表す文字列を生成するときにLocaleによって自動的にローカライズする簡単な方法があります。出力の長さを示すには、FormatStyleを指定します(省略形または省略形)。

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL); 
f = f.withLocale(Locale.CANADA_FRENCH); 

現在の時刻を取得します。 Localeとタイムゾーンは互いに関係がないことに注意してください。 1つはプレゼンテーションを決定し、もう1つは特定のwall-clock timeに調整されます。したがって、ニュージーランドでは、日本語のLocale、またはこの場合はインドのタイムゾーンをQuébécoisの人が読むために書式設定して設定することができます。

ZoneId z = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdt = ZonedDateTime.now(z); 

ローカライズしたフォーマッタオブジェクトを使用して文字列を生成します。

String output = zdt.format(f); 

java.timeについて

java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなど、面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。 FYI