为什么设置时间后日期会更改?

时间:2018-08-07 19:05:21

标签: java date calendar

我很好奇为什么设置时间(即小时,分钟和秒)时,日期减去一。例如为此代码

Calendar calendarStart = Calendar.getInstance();
Calendar calendarEnd = Calendar.getInstance();
calendarStart.setTime(startDate);
calendarStart.set(11, 0);
calendarStart.set(12, 0);
calendarStart.set(13, 0);
calendarEnd.setTime(endDate);
calendarEnd.set(11, 23);
calendarEnd.set(12, 59);
calendarEnd.set(13, 59);

甚至是此代码

startDate.setHours(0);
startDate.setMinutes(0);
startDate.setSeconds(0);
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);

比方说,我有August 01, 2018的开始日期和August 07, 2018的结束日期,在设置了上述值之后,出来的日期是Tue July 31 00:00:00 CDT 2018且结束日期是{ {1}}。为什么会发生这种情况,除了在设置后增加一天之外,我还能采取什么措施。

实例化开始和结束:

Mon August 06 23:59:59 CDT 2018

初始化后,它可以正常工作,但是只要设置了值,它就会减去一天。我让它在设置值之前和之后打印值。在达到预期的值之前,但一旦设置了这些值,便会减去日期。

1 个答案:

答案 0 :(得分:0)

java.time中的LocalDate

    LocalDate start = LocalDate.of(2018, Month.AUGUST, 1);
    LocalDate end = LocalDate.of(2018, Month.AUGUST, 7);
    System.out.println("Start is " + start + ". End is " + end + '.');
  

开始于2018-08-01。结束于2018-08-07。

java.time(现代的Java日期和时间API)中的LocalDate类表示没有日期的日期。因此,您不需要设置时间(也不能),因此永远不会有任何潜在的副作用。

您的代码出了什么问题?

我严重怀疑您发布的代码是否符合您描述的方式。因此,我认为您的错误在其他地方。但是,如果没有a Minimal, Complete, and Verifiable example,则无法确定。