2011-10-05 2 views
5

私はタイムゾーンとユーザーのロケールを持っています。今、私は日付パターンを取得したい。Javaのロケールのタイムゾーンから日付パターンを取得する方法

たとえば、ユーザのタイムゾーンPSTとロケールUSが想定しているパターンは "MM/dd/yyyy"で、ユーザのタイムゾーンがISTとロケールインドの場合、パターンは "dd/MM/yyyy"となります

これを取得するには?

注:パターンを実際の日付ではなく、他の場所で使用できるようにしたいと思います。

+1

「なぜこの他の場所」でロケールを使用しないのはなぜですか? –

+0

こんにちはペタルイワノフ、実際には、私はロケールを使用することはできませんので、パターンをJavascriptに渡したいと思います。 –

答えて

1

本当に日付パターンのTZが必要ですか?通常の方法は、ロケール(またはlocale_country)のローカライズされたプロパティファイルにデータパターンを持たせることです。私はそれが十分だと思う。

+0

日付パターンにTZは必要ありません。しかし、一般的には、私が自分の手に持つもの(ユーザーのタイムゾーンの詳細)です。 "ロケール(またはlocale_country)のローカライズされたプロパティファイルにデータパターンを持たせるのが普通です - これは、国レベルで日付パターンを維持してデータベースまたはファイルシステムに保存することをお勧めします)? –

+0

はい、そうです。 HTTP要求からTZを取得することはできないため、クライアントのロケール/国のみがわかります。もう1つの方法は、ユーザーに残りのユーザー情報でデータベースに保存することです。 – yoprogramo

3

Localeを日付/時刻形式に変換するロジックは、java.text.SimpleDateFormat#SimpleDateFormatコンストラクタに正確にsun.util.resources.LocaleData#getDateFormatDataに埋め込まれています。この方法は、ResourceBundleを提供し、次にどのスタイルが選択されたかに応じて特定のパターンについて照会される。

つまり、残念ながら、JDKはrawフォーマットにアクセスするためのAPI/SPIを提供していないようです。私の助言は、Localeを使い、フォーマット/解析の方法に渡すことです。

+0

+1あなたの独自の書式設定メソッドに渡すロケールでは、究極の柔軟なソリューション – Dapeng

0

DateFormatにstatic getInstance methodsが表示されているようです。これらは、スタイル(short、longなど)の整数定数、およびオプションでJVMのデフォルトではなく異なるロケールをとります。

0

あなたは、kは、あなたがジョダ時間を使用して(と、なぜあなたはないだろうしている場合は、いずれかを持っている場合vは、日付パターン

0

の文字列になりますロケール なりますInterface Map

を使用することができますJDK 1.7にバンドルされています)、次のようなことができます:

String patternForStyleAndLocale = org.joda.time.format.DateTimeFormat.patternForStyle("S-", locale); 

残念ながら、残念ながら2桁の年が与えられます。

if (!org.apache.commons.lang.StringUtils.contains(patternForStyleAndLocale, "yyyy")) 
{ 
    // The default Joda pattern only has a two digit year for US and Europe, China etc - but we want four digit years 
    patternForStyleAndLocale = StringUtils.replace(patternForStyleAndLocale, "yy", "yyyy"); 
} 

そして、あなたはConcurrentHashMap<Locale, String>でそれらをキャッシュを検討できます。そのための一つの仕事の周りは次のようになります。

"dd MMM yyyy" // UK: "25 Dec 2010" FRANCE: "25 déc. 2010" etc.. 

このような事前にローカライズされたパターンとして、数値、日付を得ることについての素晴らしいところは、パターンなどを使用していた場合、それが行うように、それは、後で任意の更なる局在を必要としないことです

しかし... JavaScriptにパターンを渡したいというあなたの後のコメントから、JSはJavaとは異なるパターンの書式設定を使用するため、パターンが非常に難しくなることがありました(ISOの日付はJavaでは"yyyy-MM-dd""yy-mm-dd"ではJS)。私はそれを解決しようとしていないが、私はおそらくJSまたはJavaでいくつかの文字列マッピングを使用して、単にJavaパターンからJSにマップするだろう。あらかじめ、各言語で遭遇するかもしれないパターンのそれぞれを知る必要があります。

関連する問題