2014-03-31 40 views
4

我想你們中的一些人會閱讀標題,然後說:「哦,另外一個關於java基於0的月份系統的問題......」。那麼,不是這次。爲什麼Calendar.JUNE將月份設置爲7月份?

當我們切換到夏時制時間後,我的java日曆對象的行爲就顯得非常有效。將月份設置爲JUNE,實際上將其設置爲7月。我不知道爲什麼,但有人建議我在日曆的構造函數參數中設置Locale - 對象。這沒有用。以下代碼在我的控制檯中返回01-07-14

任何想法?

public class test { 

    public static void main(String[] args){ 
     Locale locale = new Locale("da-DK"); 
     SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy"); 

     Calendar date = new GregorianCalendar(locale); 
     date.set(Calendar.MONTH, Calendar.JUNE); 
     System.out.println(sdf.format(date.getTime())); 
    } 
} 

UPDATE:

這也將返回01-07-14

public class test { 

    public static void main(String[] args){ 
     SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy"); 
     TimeZone timeZone = TimeZone.getTimeZone("Europe/Copenhagen"); 

     Calendar date = new GregorianCalendar(timeZone); 
     date.set(Calendar.MONTH, Calendar.JUNE); 
     System.out.println(sdf.format(date.getTime())); 
    } 
} 
+0

要正確處理DST,您需要告訴代碼使用哪個TimeZone。 – nablex

+0

通過「切換到夏令時」,你的意思是有史以來第一次,還是每年這個時候經常發生? –

+0

這是每年經常發生的事情,但這是我第一次受到系統影響。它是在不到半年前製作的,所以它是自那以後的第一次出現。 – KjetilNordin

回答

5

今天是3月31日。當您設置日曆的月份時,當天仍保持設置,但6月31日不存在,因此Calendar會翻到7月1日。

+0

是的!當然!我早該知道。在我們轉向夏令時之後發生這種事很方便,讓我更加困惑。非常感謝你!我會確保將這一天設置爲1,然後再對該月做任何事情:) – KjetilNordin

+2

打敗我,'date.set(Calendar.DAY_OF_MONTH,1);'修復它;) – Gorbles

+0

...和那個正是我現在所做的;)。多謝你們。真的感謝。你在這個節目上可能會讓我沮喪幾個小時。 – KjetilNordin

相關問題