私はタイムゾーンとユーザーのロケールを持っています。今、私は日付パターンを取得したい。Javaのロケールのタイムゾーンから日付パターンを取得する方法
たとえば、ユーザのタイムゾーンPSTとロケールUSが想定しているパターンは "MM/dd/yyyy"で、ユーザのタイムゾーンがISTとロケールインドの場合、パターンは "dd/MM/yyyy"となります
これを取得するには?
注:パターンを実際の日付ではなく、他の場所で使用できるようにしたいと思います。
私はタイムゾーンとユーザーのロケールを持っています。今、私は日付パターンを取得したい。Javaのロケールのタイムゾーンから日付パターンを取得する方法
たとえば、ユーザのタイムゾーンPSTとロケールUSが想定しているパターンは "MM/dd/yyyy"で、ユーザのタイムゾーンがISTとロケールインドの場合、パターンは "dd/MM/yyyy"となります
これを取得するには?
注:パターンを実際の日付ではなく、他の場所で使用できるようにしたいと思います。
本当に日付パターンのTZが必要ですか?通常の方法は、ロケール(またはlocale_country)のローカライズされたプロパティファイルにデータパターンを持たせることです。私はそれが十分だと思う。
日付パターンにTZは必要ありません。しかし、一般的には、私が自分の手に持つもの(ユーザーのタイムゾーンの詳細)です。 "ロケール(またはlocale_country)のローカライズされたプロパティファイルにデータパターンを持たせるのが普通です - これは、国レベルで日付パターンを維持してデータベースまたはファイルシステムに保存することをお勧めします)? –
はい、そうです。 HTTP要求からTZを取得することはできないため、クライアントのロケール/国のみがわかります。もう1つの方法は、ユーザーに残りのユーザー情報でデータベースに保存することです。 – yoprogramo
Locale
を日付/時刻形式に変換するロジックは、java.text.SimpleDateFormat#SimpleDateFormat
コンストラクタに正確にsun.util.resources.LocaleData#getDateFormatData
に埋め込まれています。この方法は、ResourceBundle
を提供し、次にどのスタイルが選択されたかに応じて特定のパターンについて照会される。
つまり、残念ながら、JDKはrawフォーマットにアクセスするためのAPI/SPIを提供していないようです。私の助言は、Locale
を使い、フォーマット/解析の方法に渡すことです。
+1あなたの独自の書式設定メソッドに渡すロケールでは、究極の柔軟なソリューション – Dapeng
DateFormatにstatic getInstance
methodsが表示されているようです。これらは、スタイル(short、longなど)の整数定数、およびオプションでJVMのデフォルトではなく異なるロケールをとります。
あなたは、kは、あなたがジョダ時間を使用して(と、なぜあなたはないだろうしている場合は、いずれかを持っている場合vは、日付パターン
の文字列になりますロケール なります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にマップするだろう。あらかじめ、各言語で遭遇するかもしれないパターンのそれぞれを知る必要があります。
「なぜこの他の場所」でロケールを使用しないのはなぜですか? –
こんにちはペタルイワノフ、実際には、私はロケールを使用することはできませんので、パターンをJavascriptに渡したいと思います。 –