3

我只想创建一个方法,将日期设置为同一天的时间“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());

我预计
2013 年 9 月 17 日星期二 23:59:59 BRT 2013 年
9 月 17 日星期二 23:59:59 BRT 2013

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

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

4

2 回答 2

5

Calendar.HOUR用于 12 小时制,改为使用或Calendar.HOUR_OF_DAY为 12 小时制输入正确的值:c.set(Calendar.HOUR, 11);

于 2013-09-17T12:03:44.660 回答
0

使用 JodaTime 而不是 Java 日历。这是一种更加用户友好的方式。

  • 所有 Joda Time 日期/时间对象都建立在长时间戳之上,因此从长时间戳创建这些对象很便宜。

  • 在 Joda Time 2.1 版中,从日期/时间组件(年、月、日、小时、分钟、秒)创建日期/时间对象比 JDK GregorianCalendar 的相同操作慢约 3.5 倍。Joda Time 中的日期组件加/减比 GregorianCalendar 慢 3.5 倍。相反,时间组件操作比 GregorianCalendar 实现快大约 3.5 倍。

  • 日期/时间解析的工作速度与 JDK SimpleDateFormat 中的速度大致相同。Joda 解析的优点是创建解析器 - DateTimeFormatter 对象非常便宜,不像昂贵的 SimpleDateFormat,因此您不必再缓存解析器。

http://java-performance.info/joda-time-performance/

于 2013-09-17T14:27:53.960 回答