如果我在一个日期中将小时,分钟和秒设置为0,那么该日将减少1 ..

问题描述:

首先,我知道我可以使用Calendar,但我想了解这个问题并学会解决它。如果我在一个日期中将小时,分钟和秒设置为0,那么该日将减少1 ..

我有一个Date与当前日期。我想设置小时,分钟和秒0。我这个代码做到这一点:

 current_date.setHours(0); 
     current_date.setMinutes(0); 
     current_date.setSeconds(0); 

事情错了,因为如果我这样做,这一天被减1,例如,如果今天是31 ,当天设定为30.

为什么?如何解决与Date(不使用Calendar,我想学习如何解决这个难题)。谢谢

+0

@LukeTaylor为什么不呢?有很多可能有效的问题标题,包括“为什么”这个词。 – 2012-07-31 12:11:19

+0

你的问题标题现在是合法的,这是所有的康夫之前。 :P – 2012-07-31 12:17:17

+1

此代码不会改变一天; http://ideone.com/uE7Yx? – Patrick 2012-07-31 12:20:07

只是猜测设定方法都已过时......

我猜它与时区的事情。

当您将HMS设置为0时,您不是根据您的时区设置它们,而是根据UTC(不是100%确定,但是...)。所以生成的日期是不是:

0:0:0 YOUR LOCAL 

0:0:0 GMT 

,这是一个前一天,如果你是在美国。

尝试将分钟设置为-yourDate.getTimezoneOffset()(如果不起作用,请尝试使用正值)。

看看这些方法的实现。他们使用公历。该错误可能来自该交互。

注:因为JDK 1.1 see

+1

如果这是真的,这是一个绝对没有意义的惯例。 – 2012-07-31 12:12:52

+0

尝试将小时,分钟和秒设置为零。检查是否递减长(0:00:00至23:59:59)导致较小的一天。 – RaphMclee 2012-07-31 12:18:05

+1

我无法亲自复制问题中描述的情况。初始化一个Date对象给了我初始化的时间,调用'setHours(0)','setMinutes(0)'和'setSeconds(0)'给我一个今天午夜的Date对象,然后从中减去1000长期价值(稍早)给我一个昨天23:59:59的日期。 – 2012-07-31 12:21:58