2010-12-17 4 views
6

私は、特定のロケールがAM/PM 12時間または24時間表示で時間の表示を好むかどうかをJavaプログラムで伝える方法を探しています。さて、通常は、DateFormatを使用して、ロケールに適切な日付を適切にフォーマットします。しかし、ロケールの好みを直接的に知る必要があるトランジットスケジュールのステム・アンド・リーフカレンダー表示をローカライズしようとしています。あなたはここでのスケジュールの例を見ることができます:Javaロケール情報からAM/PMと24時間クロックの環境設定を検出しますか?

http://onebusaway.org/where/standard/schedule.action?id=1_538

私は24時間、プログラム対12時間のAM/PMを検出することができる方法上の任意のアイデアは?

答えて

3

あなたはこのように、それを調べることができます。

boolean hasAmPmClock(Locale locale) { 
     DateFormat stdFormat = DateFormat.getTimeInstance(DateFormat.SHORT, 
       Locale.US); 
     DateFormat localeFormat = DateFormat.getTimeInstance(DateFormat.LONG, 
       locale); 
     String midnight = ""; 
     try { 
      midnight = localeFormat.format(stdFormat.parse("12:00 AM")); 
     } catch (ParseException ignore) { 
     } 
     return midnight.contains("12"); 
} 
0

私は受け入れ答えよりも少し小さい遠回りだ別の方法が見つかりました:まだ

DateFormat format; 
// ... 
boolean is24Hour; 
if (format instanceof SimpleDateFormat) { 
    SimpleDateFormat sdf = (SimpleDateFormat)format; 
    String pattern = sdf.toPattern(); 
    is24Hour = !pattern.contains("a"); 
} 

かなり総額を、そして、それは動作しません他のDateFormatコンクリート型を使用していますが、DateFormatオブジェクトを取得する標準的な方法は、SimpleDateFormatを返すようです。

関連する問題