我只想创建一个方法,将日期设置为同一天的时间“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();
}
当我跑步时:
Date d = new Date();
d=date235959(d);
System.out.println(d.toString());
d=date235959(d);
System.out.println(d.toString());
我期待着
Tue Sep 17 23:59:59 BRT 2013
Tue Sep 17 23:59:59 BRT 2013
但输出是
Tue Sep 17 23:59:59 BRT 2013
9月18日星期三11:59:59 BRT 2013
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:5)
Calendar.HOUR
用于12小时制,使用Calendar.HOUR_OF_DAY
代替或为12小时制正确值:c.set(Calendar.HOUR, 11);
答案 1 :(得分:0)
使用JodaTime而不是Java Calendar。这是更方便用户的方式。
所有Joda Time日期/时间对象都建立在长时间戳之上,因此从长时间创建这些对象的成本很低。
在Joda Time ver 2.1中,从日期/时间组件(年,月,日,小时,分钟,秒)创建日期/时间对象比约3.5倍慢 与JDK GregorianCalendar相同的操作。 日期组件的加法/减法在Joda Time中比在GregorianCalendar中慢3.5倍。相反,时间 组件操作大约相同的3.5倍 GregorianCalendar实施。
日期/时间解析的速度与JDK SimpleDateFormat的速度大致相同。 Joda解析的优点是创建了一个 解析器 - DateTimeFormatter对象非常便宜,不像 昂贵的SimpleDateFormat,因此您不必缓存解析器 了。