将时间设置为 00:00:00

2024-03-31

我在 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, use Calendar.HOUR_OF_DAY http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#HOUR_OF_DAY.

calendar.set(Calendar.HOUR_OF_DAY, 0);

Calendar.HOUR使用 0-11(用于 AM/PM),并且Calendar.HOUR_OF_DAY使用 0-23。

引用Javadoc:

公共静态最终 int HOUR

get 和 set 指示的字段编号 上午或下午的时间。 HOUR 用于 12 小时 时钟(0 - 11)。中午和午夜用 0 表示,而不是 12。 例如,晚上 10:04:15.250 的 HOUR 为 10。

and

公共静态最终 int HOUR_OF_DAY

get 和 set 的字段编号 指示一天中的时间。 HOUR_OF_DAY 用于 24 小时 钟。例如,晚上 10:04:15.250,HOUR_OF_DAY 为 22。

测试(“现在”当前为太平洋夏令时间 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()));
    }
}

Output:

$ javac Main.java
$ java Main
2013-07-23 12:00:00
2013-07-23 00:00:00
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将时间设置为 00:00:00 的相关文章