2012-05-27 285 views
23

我只想日期顯示,像這樣:格式化日曆日期

Saturday, May 26, 2012 at 10:42 PM

這裏是我到目前爲止的代碼:

Calendar calendar = Calendar.getInstance(); 
String theDate = calendar.get(Calendar.MONTH) + " " + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.YEAR); 

lastclick.setText(getString(R.string.lastclick) + " " + theDate); 

這表明,月,日的數字,和一年,但有這樣做的更好的方法?是不是有一些簡單的方法來使用PHP的date()函數?

+1

是的。不明白爲什麼這是如此困難。 – scarhand

回答

14

根據需要使用下面的格式來設置日期。請參閱本LINK

Calendar calendar = Calendar.getInstance(); 
lastclick.setText(getString(R.string.lastclick) + " " + String.format("%1$tA %1$tb %1$td %1$tY at %1$tI:%1$tM %1$Tp", calendar)); 

凡%1 $ TA的staurday, %$ 1個TB五月,

等等...

+1

我不小心提出了這個問題,但我似乎無法在不降低投票的情況下取消我的投票,這是沒有必要的。這個工作,但下面的更直接,更容易閱讀。 – craned

71
Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM d, yyyy 'at' h:mm a"); 
System.out.println(format.format(calendar.getTime())); 

運行上述代碼輸出當前時間(例如,Saturday, May 26, 2012 at 11:03 PM)。

查看Android documentation for SimpleDateFormat瞭解更多信息。

SimpleDateFormat格式規範類似於PHP的date功能:

echo date("l, M j, Y \a\\t g:i A"); 

你說得對。與Java代碼相比,PHP代碼更加簡潔。

+0

您的代碼會生成提交者想要的特定格式,但如果要根據用戶的系統設置設置格式,該怎麼辦?在Windows上,C#代碼DateTime.ToLongDateString()生成該代碼。如果我想在Android上實現相同的功能,該怎麼辦? –

+1

請參閱我的答案,瞭解包含語言環境的解決方案。 – String

10

這實際上是一個相當微妙的問題得到正確,我從來沒見過這裏SO另一個答案,解決兩個:

  • Calendar的時區(這意味着它可能會呈現出不同的日期比羅CAL)
  • 該器件的Locale(這影響了「正確」的方式格式化日期)

以前這個問題的答案忽略語言環境,以及其他答案涉及轉換爲Date忽略的時區。所以這裏有一個更完整的,通用的解決方案:

Calendar cal = Calendar.getInstance(); // the value to be formatted 
java.text.DateFormat formatter = java.text.DateFormat.getDateInstance(
     java.text.DateFormat.LONG); // one of SHORT, MEDIUM, LONG, FULL, or DEFAULT 
formatter.setTimeZone(cal.getTimeZone()); 
String formatted = formatter.format(cal.getTime()); 

請注意,您需要在這裏使用java.text.DateFormat,而不是Android的自己(容易混淆的命名)android.text.format.DateFormat