6

次を使用して SQL SELECT クエリの文字列として設定する「固定」時間 (24 時間制の午前 0 時、つまり 00:00:00) を作成しようとしています...

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

GregorianCalendar todayDate = new GregorianCalendar();
Log.d(TAG, "todayDate: " + todayDate.getTime().toString());
Log.d(TAG, "formatted todayDate: " + sdf.format(todayDate.getTime()));
todayDate.clear(Calendar.HOUR);
todayDate.clear(Calendar.MINUTE);
todayDate.clear(Calendar.SECOND);
todayDate.set(Calendar.HOUR, 0);
todayDate.set(Calendar.MINUTE, 0);
todayDate.set(Calendar.SECOND, 0);
Log.d(TAG, "formatted modified todayDate: " + sdf.format(todayDate.getTime()));

現在の時刻が午後でない限り、これで問題ありません。例えば、

todayDate: Fri Jan 28 23:34:34 GMT 2011
formatted todayDate: 2011-01-28 23:34:34
formatted modified todayDate: 2011-01-28 12:00:00 <- THE hour is 12 not 00

現在の時刻が午前 0 時から正午の間 (つまり、00:00:00 -> 11:59:59 AM) にこれを行うと、書式設定された文字列の時間は正しく 00 に設定されます。正午から真夜中までの時間は、00 ではなく 12 を取得します。

誰かがこれを説明して、修正(または物事を行う別の方法)を見つけるのを手伝ってもらえますか?

4

1 に答える 1

13

代わりにに設定HOUR_OF_DAYする必要があります0HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

APIドキュメントから:

HOUR午前または午後の時間を示す get および set のフィールド番号。HOUR は 12 時間時計 (0 から 11) に使用されます。正午と真夜中は、12 ではなく 0 で表されます。たとえば、10:04:15.250 PM の HOUR は 10 です。

HOUR_OF_DAY時刻を示す get および set のフィールド番号。HOUR_OF_DAY は 24 時間時計に使用されます。たとえば、午後 10:04:15.250 の HOUR_OF_DAY は 22 です。

于 2011-01-28T01:11:57.547 に答える