私はかつて同じ問題を抱えていました。トルコ語のロケールが存在するかどうかを確認できます。
ところで、から月名を取得することをお勧めしstrings.xml
ます。将来、アプリケーションに多言語サポートを追加することがより簡単になります。日付オブジェクトからデフォルトのロケールで月番号を取得し、月配列からその参照を取得するだけです。
編集:この API レベルの違いの理由を知り、API レベル 10 と 14 のソース コードをダウンロードして、デバッグを開始しました。
理由:すぐに、違いはjava.text.DateFormatSymbols
クラスから生じます。両方の API に同じコードがありますが、異なるバージョンの (または動作が異なる) を使用していますlibcore.icu.LocaleData
。インスタンスの初期化を担当しますDateFormatSymbols
。
詳細:SimpleDateFormat
インスタンスがロケールで作成された
場合、このパラメーターはformatData
、(のインスタンスであるDateFormatSymbols
) と呼ばれるそのプロパティをインスタンス化するために使用されます。
そのコンストラクタ:
API レベル 10 および 14 以降java.text.DateFormatSymbols
public DateFormatSymbols(Locale locale) {
this.locale = locale;
this.localPatternChars = SimpleDateFormat.PATTERN_CHARS;
LocaleData localeData = LocaleData.get(locale);
this.ampms = localeData.amPm;
this.eras = localeData.eras;
this.months = localeData.longMonthNames;
this.shortMonths = localeData.shortMonthNames;
this.weekdays = localeData.longWeekdayNames;
this.shortWeekdays = localeData.shortWeekdayNames;
// ICU/Android extensions.
this.longStandAloneMonths = localeData.longStandAloneMonthNames;
this.shortStandAloneMonths = localeData.shortStandAloneMonthNames;
this.longStandAloneWeekdays = localeData.longStandAloneWeekdayNames;
this.shortStandAloneWeekdays = localeData.shortStandAloneWeekdayNames;
}
デバッグできませんでしたlibcore.icu.LocaleData
が、そのクラスに違いがあります。LocalData
API レベル 10 と 14 では、インスタンスとは異なる方法で値が読み込まれます。変更ログを調査して、LocaleData の違いを見つけることができます。
合計: Api レベル 10 より前の未定義のロケール ("xx" など) で
aSimpleDateFormat
が作成された場合、システムはデフォルト ロケールの出力の数値表現 (月名 [1..12]、日名 [1..6]) を使用します。 . API レベル 14 以降では、ロケールが見つからない場合、デフォルトのロケールに基づいて出力が表示されます。(API レベル 11、12、13 ではまだテストしていません。)
システムのデフォルトのロケールを使用することをお勧めします。ロケールを使用する必要がある場合は、まずそれが定義されているかどうかを確認してください。定義されていない場合は、独自のロジックを作成してください。
日付を表示したい場合は、この回答の2行を検討してください。