2010-12-08 123 views
46

我想確定當前區域設置是否設置爲12或24小時,並相應地設置am/pm。這是我有權利,但它顯示AM/PM所有的時間,無論它是否被設置爲24如何檢查系統是12小時還是24小時?

if (DateFormat.is24HourFormat(this)) 
{ 
    mHour = mCalendar.get(Calendar.HOUR_OF_DAY); 
    int hourOfDay = mHour; 
    if (hourOfDay>12) 
     views.setTextViewText(R.id.AMPM, "pm"); 
    if (hourOfDay==12) 
     views.setTextViewText(R.id.AMPM, "pm"); 
    if (hourOfDay<12) 
     views.setTextViewText(R.id.AMPM, "am"); 
} 
else { 
    views.setTextViewText(R.id.AMPM, "");   
} 

回答

82

它不應該是

if (!DateFormat.is24HourFormat(this)) 

你要分配時/下午只有當它沒有設置爲24小時制時,對吧?

這裏是一個更緊湊的版本:

if (!DateFormat.is24HourFormat(this)) { 
    mHour = mCalendar.get(Calendar.HOUR_OF_DAY); 
    int hourOfDay = mHour; 
    if (hourOfDay >= 12) { 
     views.setTextViewText(R.id.AMPM, "pm"); 
    } else { 
     views.setTextViewText(R.id.AMPM, "am"); 
    } 
} else { 
    views.setTextViewText(R.id.AMPM, ""); 
} 
+1

優秀。現在就像魅力一樣。你只是做了我認爲是一個錯字。如果(hourOfDay => 12)不應該沒有=? – tristan202 2010-12-09 19:16:21

7

更好的解決方案和完整的代碼示例:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 

// below, the "hour" and "min" are variables,to which you want to set 
calendar.For example you can take this values from time picker 
calendar.set(Calendar.HOUR_OF_DAY, hour); 
calendar.set(Calendar.MINUTE, min);    

is24HourFormat = android.text.format.DateFormat.is24HourFormat(context); 

if (is24HourFormat) { 
    // if system uses 24hourformat dateFormat will format the calender time according to 24hourformat. "HH" means 24hourformat 
    CharSequence setTime = dateFormat.format("HH:mm", calendar); 

} else { 
    // if system doesnt use 24hourformat dateFormat will format the calender time according to 12hourformat. "hh" means 12hourformat and "a" will show am/pm marker 
    CharSequence setTime = dateFormat.format("hh:mm a", calendar); 
} 
2

始終顯示AM/PM在12小時格式,而不是像在德國vorm/nachm,使用Locale.US日期格式:

/** 
* Returns the time in a localized format. The 12-hours format is always displayed with 
* AM/PM (and not for example vorm/nachm in german). 
* 
* @param context the context 
* @return Localized time (15:24 or 3:24 PM). 
*/ 
public static String getTime(Context context, long time) { 
    if (android.text.format.DateFormat.is24HourFormat(context)) { 
     return new SimpleDateFormat("HH:mm", Locale.US).format(new Date(time)); 

    } else { 
     return new SimpleDateFormat("hh:mm a", Locale.US).format(new Date(time)); 
    } 
} 
相關問題