日期/日历的奇怪行为

tpc*_*iro 3 java calendar date

我只想创建一个方法,将日期设置为同一天的时间"23:59:59.999".所以我做了这个:

public static Date date235959(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR, 23);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    c.set(Calendar.MILLISECOND, 999);
    //c.set(Calendar.AM_PM, Calendar.PM);

    return c.getTime();
}
Run Code Online (Sandbox Code Playgroud)

当我跑:

Date d = new Date();
d=date235959(d);
System.out.println(d.toString());
d=date235959(d);
System.out.println(d.toString());
Run Code Online (Sandbox Code Playgroud)

我期待
Tue Sep 17 23:59:59 BRT 2013
Tue Sep 17 23:59:59 BRT 2013

但输出是
Tue Sep 17 23:59:59 BRT 2013
Wed Sep 18 11:59:59 BRT 2013

为什么会发生这种情况,我该如何解决?

Ale*_*r M 5

Calendar.HOUR用于12小时时钟,使用Calendar.HOUR_OF_DAY替代或者把正确的价值为12小时制:c.set(Calendar.HOUR, 11);