グレゴリアンカレンダー /カレンダーと時間フィールドの奇妙さの設定

StackOverflow https://stackoverflow.com/questions/4823721

  •  26-10-2019
  •  | 
  •  

質問

「固定」時間(真夜中の24時間の時計形式、IE、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()));

現在の時間がPMでない限り、これは問題ありません。例えば、

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

現在の時刻が真夜中から正午まで(つまり、00:00:00-> 11:59:59 AM)の間にこれを行うと、フォーマットされた文字列での時間は00に正しく設定されます。正午以降と真夜中までには、00ではなく1時間で12を取得します。

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

役に立ちましたか?

解決

設定する必要があります HOUR_OF_DAY0 それ以外の HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0);

APIから ドキュメント:

HOUR 午前中または午後の時間を示すGETとセットのフィールド番号。時間は12時間の時計(0-11)に使用されます。正午と真夜中は、12ではなく0で表されます。

HOUR_OF_DAY Get and Setのフィールド番号は、その日の時間を示すセット。 hour_of_dayは24時間の時計に使用されます。たとえば、10:04:15.250 pm hour_of_dayは22です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top