2012-07-31 71 views
3

首先,我知道我可以使用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

回答

2

只是猜測設定方法都已過時......

我猜它與時區的事情。

當您將HMS設置爲0時,您不是根據您的時區設置它們,而是根據UTC(不是100%確定,但是...)。所以生成的日期是不是:

0:0:0 YOUR LOCAL 

0:0:0 GMT 

,這是一個前一天,如果你是在美國。

嘗試將分鐘設置爲-yourDate.getTimezoneOffset()(如果不起作用,請嘗試使用正值)。

2

看看這些方法的實現。他們使用公曆。該錯誤可能來自該交互。

注:因爲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

相關問題