通过日历获取当天的最后一次会产生错误的结果

时间:2015-07-10 11:05:52

标签: java date calendar

我正试着赶上当天的最后一次 例如:
今天的最后一次是10.07.2015 23:59:59:999

因此我写了以下方法:

private static Date getLastDateOfDay() {
    final Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MILLISECOND, 999);
    cal.set(Calendar.SECOND, 59);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.HOUR, 23);
    return cal.getTime();
}

这应该获取当前日期然后设置: 从小时到23点
分钟到59
秒到59
毫秒到999

所以这应该给我这一天的最后一个毫秒。 但是当我使用这种方法时:

Date date = getLastDateOfDay();

然后日期的值为:11.07.2015 23:59:59:999

我错过了什么吗?我做错了吗? 请帮我解决一下这个。 锡先生。

4 个答案:

答案 0 :(得分:3)

你不能使用23岁的小时

see Javadoc from Calendar

  

public static final int HOUR

     

获取和设置的字段编号,表示上午或下午的小时。小时用于12小时制(0 - 11)。中午和午夜由0表示,而不是由12表示。例如,在10:04:15.250 PM,HOUR为10。

答案 1 :(得分:1)

设置

cal.set(Calendar.HOUR_OF_DAY, 23);

答案 2 :(得分:0)

您可以尝试为Calendar实例设置显式时区,即:

final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC");

这个答案也有帮助: What is the default timezone for java.util.Calendar.?

答案 3 :(得分:0)

我希望这可能就是你所期待的。

private static Date getLastDateOfDay() {
        final Calendar cal = Calendar.getInstance();

        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
        return cal.getTime();
    }