2011-09-09 13 views
0

私はSimpleDateFormatを使用して、日付から関連情報を取得します。エミュレータでうまくいきましたが、デバイスでテストすると正しくフォーマットできません。 Logcatはエミュレータで正しく表示されますが、再度誤って表示されます。SimpleDateFormatはエミュレータで正しく動作し、デバイス上で間違っています

private String getSectionHeaderTitle(Date date) { 
    SimpleDateFormat dayFormat = new SimpleDateFormat("E"); 
    SimpleDateFormat monthFormat = new SimpleDateFormat("MMM"); 
    SimpleDateFormat dayNumFormat = new SimpleDateFormat("dd"); 
    SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy"); 

    String dayString = dayFormat.format(date); 
    String monthString = monthFormat.format(date); 
    String dayNumString = dayNumFormat.format(date); 
    String yearString = yearFormat.format(date); 

    String headerTitle = dayString + ", " + monthString + " " 
      + dayNumString + " " + yearString; 

    Log.i(TAG, "Date " + date + " Day " + dayString + ", " + " Month " 
      + monthString + " Year " + yearString); 
    Log.d(TAG, headerTitle); 
    return headerTitle; 
} 

ログエミュレータ2.3.3用:

09-09 13:13:55.435: INFO/EventsListActivity(4252): Date 2011-12-11 Day Sun, Month Dec Year 2011 
09-09 13:13:55.435: DEBUG/EventsListActivity(4252): Sun, Dec 11 2011 

デバイス2.3.4のログ:

09-09 18:30:34.203: INFO/EventsListActivity(7962): Date 2011-10-16 Day 1, Month 10 Year 2011 
09-09 18:30:34.203: DEBUG/EventsListActivity(7962): 1, 10 16 2011 

任意の助けを大幅に高く評価されています。

答えて

3

SimpleDateFormatで使用される記号(つまり 'Sun'と '1')は、SimpleDateFormatのDateFormatSymbolsメンバーを介して設定されます。

あなたが指定したコードでは、ロケールを明示的に設定していないため、システムのデフォルトロケールが使用されます。そのロケールに格納されている情報の一部はDateFormatSymbolsオブジェクトです。

一般に、デフォルトのロケールが正しいことを信じることは絶対にお勧めできません。これは、システムやその他の要素によって異なる場合があります。

これはまさに上記のコードで起こっていることですが、エミュレータはデバイスと異なるデフォルトのロケールを持ち、異なるDateFormatSymbolsのセットを持っています。あなたの出力に基づいて、デバイスがデフォルトでLocale.ROOTロケールに設定されているだけで、言語のない整数値が出力されると思います。

SimpleDateFormatオブジェクトに使用されるロケールを手動で設定するのが最も簡単に修正できます。

Locale locale = Locale.US; //or whatever you want, see note below 

SimpleDateFormat dayFormat = new SimpleDateFormat("E", locale); 
SimpleDateFormat monthFormat = new SimpleDateFormat("MMM", locale); 
SimpleDateFormat dayNumFormat = new SimpleDateFormat("dd", locale); 
SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", locale); 

は、使用可能なロケールのためhttp://developer.android.com/reference/java/util/Locale.html#default_localeを参照してくださいか、Locale.getAvailableLocales()メソッドを介してそれらを介して見ることができます。

+0

説明と助けをありがとうございました。 – Sam

関連する問題