2012-02-11 10 views
2

特定のロケールの日付をフォーマットしようとしていますnew Locale("mk", "MK")。ロケールは有効で、国名と言語が正しく返されます。私はカスタムの文字列を使用したいと思います。私の場合は「E、kk:mm」または「EEEE、kk:mm」です。私はアウトプットを "午後12時"にしたいが、私が得るのは "7、12:00"である。特定のロケールのアンドロイドでのカスタム日付形式

これは私がそれを使う方法であり、多くの方法を試しましたが、それらはすべて同じように動作するようです。

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK)); 
sdf.format(new Date()); 
// output: 7, 12:30 

もう一つの方法は、私が

Calendar calendar = Calendar.getInstance(new Locale("mk", "MK")); 
calendar.setTimeInMillis(new Date().getTime()); 
DateFormat.format("EEEE, kk:mm", calendar); 
// output: Saturday, 12:30 
私も java.text.DateFormat代わりにAndroidのクラスを使用してみました

、ない変更を試してみました。

携帯電話のロケールが英語に設定されていますが、これはローカライズされたアプリです。固定されたロケール形式で日付を表示したいとします。

私はこの問題に関して多くのSOの質問を調べましたが、回答を見つけることができませんでした。私はあらかじめ定義されたフォーマットに興味がなく、自分のフォーマットを使いたいので、入力ロケールの日付/月名をフォーマットしたい。

答えて

3

私はこの問題は、マケドニアは、Android JVM上でサポートされているロケールではないということだと思います。プレーンなJavaコンソールアプリケーションとしてコードを実行しても問題ありません。 Locale.getAvailableLocales()メソッドは、プレーンJavaでは152のメンバーを返し、Androidエミュレータでは88しか返しません。コードスニペットがある場合:

Locale[] locales = Locale.getAvailableLocales(); 
    String cCode; 
    for (Locale loc :locales){ 
     cCode = loc.getCountry(); 
     if (cCode.equalsIgnoreCase("MK")) 
      Toast.makeText(this, cCode, Toast.LENGTH_SHORT).show(); 
     // Or System.out.println() in a Java app  
} 

を、それがJavaアプリで

+0

107私のデバイスでは、あなたは正しいですが、マケドニアはありません。他の答えに私のコメントを参照してください。 –

+0

さて、私は数時間の検索の後にこの記事に行きました。私は同じ答えを探していましたが、イタリア語のために:それは残念なことに私の使用可能なロケールのリストにはありません。チャンスは無い。 – Zappescu

2

てSimpleDateFormatのドキュメントから:

**Text**: For formatting, if the number of pattern letters is 4 or more, 
the full form is used; otherwise a short or abbreviated form is used if 
available. For parsing, both forms are accepted, independent of the 
number of pattern letters. 

だから、これはそれを修正する必要があります

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK")); 
+0

それはすべきですが、そうではありません。出力はまだ '7、12:30'です。 'locale.getCountryName()'が "Macedonian(Macedonia)"を正しく返しているので、ロケールの問題ではないと思います。しかし、土曜日は "mk"ロケールの6日目なので、 '6、12:30'を返します。 –

+0

@TomislavMarkovski:あなたは確信していますか?この答えで与えられたコードは、あなたの質問が示すものと同じではないことに注意してください。これは 'E'ではなく' EEEE'です。 –

+0

@JonSkeet、はい、私は今、私のデバイス上で、すべての可能なバリエーションをデバッグする直前にそれを試していると確信しています。 –

2

をprintlnをしますが、その後トーストはNickTが速く:-)だったので、ちょうど彼の答えに追加する「MK」のために表示されません。 :

for (Locale l:Locale.getAvailableLocales()) { 
    Log.d(l.getDisplayCountry(),l.toString()); 
} 

を、あなたはマケドニアがリストにないことがわかります:あなたはあなたのロケールは、Android上でサポートを参照したい場合は、実行します。

+0

これは正しいです。問題が見つかりましたが、私は自分の答えを更新しませんでした。私の電話は107のロケールをサポートしています。国コードとして "mk"を渡してLocaleオブジェクトを作成することはできますが、完全な国名と言語を返しますが、数値と日付の定義は含まれていません。 "mk"はサポートされているロケールにはありません。 –

関連する問題