web-dev-qa-db-ja.com

カレンダーの日付のフォーマット

日付を次のように表示したいだけです。

_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()関数を使用するような簡単な方法はありませんか?

31
scarhand

以下を使用して、必要に応じて日付をフォーマットします。これを参照してください [〜#〜] 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));

ここで、staurdayは%1 $ tA、5月は%1 $ tb、

等々...

16
Shankar Agarwal
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)。

詳細については、 SimpleDateFormatのAndroidドキュメント を参照してください。

SimpleDateFormatのフォーマット仕様は、PHPの date 関数のフォーマット仕様と似ています。

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

あなたが正しい。 Javaコードと比較して、PHPコードははるかに簡潔です。

93
creemama

これは、実際にはかなり微妙な問題であり、ここでSOの両方に対処する別の答えを見たことはありません。

  • Calendarのタイムゾーン(ローカルとは異なる日付を表示している可能性があることを意味します)
  • デバイスの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ではありません。

13
String