1. ホーム
  2. java

[解決済み] 時刻を00:00:00に設定

2022-06-21 22:47:36

質問

Javaで時間をリセットするのに問題があります。与えられた日付のために、私は時間を00:00:00に設定したいと思います。

これは私のコードです。

/**
     * Resets milliseconds, seconds, minutes and hours from the provided date
     *
     * @param date
     * @return
     */
    public static Date trim(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR, 0);

        return calendar.getTime();
    }

問題は、時々、その時間が 12:00:00 であり、時には 00:00:00 で保存されたエンティティをデータベースに問い合わせたところ 07.02.2013 00:00:00 で、実際に保存されているエンティティの時刻は 12:00:00 である場合、クエリは失敗します。

私が知っているのは 12:00:00 == 00:00:00 !

AppEngineを使用しています。これは、appengineのバグ、問題、または他の問題でしょうか? それとも他のものに依存しているのでしょうか?

どのように解決するのですか?

の代わりに別の定数を使用します。 Calendar.HOUR を使う。 Calendar.HOUR_OF_DAY .

calendar.set(Calendar.HOUR_OF_DAY, 0);

Calendar.HOUR は 0-11 (AM/PM で使用) を使用し Calendar.HOUR_OF_DAY は0-23を使用します。

Javadocsを引用すると。

public static final int HOUR

午前または午後の時間を示す、取得および設定用のフィールド番号です。 午前または午後の時間帯を示す取得および設定用のフィールド番号です。HOURは12時間制の 時計に使用されます(0~11)。正午と真夜中は12ではなく、0で表されます。 例えば、午後10時4分15秒250の場合、HOURは10です。

public static final int HOUR_OF_DAY

時刻を示すgetとsetのためのフィールド番号 一日の時間を示すフィールド番号です。HOUR_OF_DAYは24時間制の時計に使用されます。 時計に使用されます。例えば、午後10時04分15秒250の場合、HOUR_OF_DAYは22です。

テスト("now"は現在、2013年7月23日14時55分(太平洋夏時間)頃です)。

public class Main
{
   static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void main(String[] args)
    {
        Calendar now = Calendar.getInstance();
        now.set(Calendar.HOUR, 0);
        now.set(Calendar.MINUTE, 0);
        now.set(Calendar.SECOND, 0);
        System.out.println(sdf.format(now.getTime()));
        now.set(Calendar.HOUR_OF_DAY, 0);
        System.out.println(sdf.format(now.getTime()));
    }
}

出力します。

$ javac Main.java
$ java Main
2013-07-23 12:00:00
2013-07-23 00:00:00