2011-03-07 99 views
0

不知何故我報告了一個問題,其中以下代碼將來會提供日期。java日曆/格式化程序提供了錯誤的日期

所用的時區爲格林尼治標準時間+01:00。 numberOfDays是非負整數。

此代碼的意圖是減少當前日期的天數。

SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yy",Locale.ENGLISH); 
Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DAY_OF_MONTH, -numberOfDays); 
Date date = calendar.getTime(); 
String dateStr= formatter.format(date); 
System.out.println("Date : "+dateStr); 

我無法在我的機器上重現此操作。

區域設置是否影響時區?

我試圖關聯到Why does a new SimpleDateFormat object contain calendar with the wrong year?Strange problem with timezone, calendar and SimpleDateFormat,但徒勞無功。

請幫我理解並糾正這個問題。

+0

適合我的作品(打印日期:2月25日11日爲我;我在格林威治標準時間)。你的系統在哪個時區? – adarshr 2011-03-07 11:40:20

+0

只是爲了澄清:在哪裏能夠在本地重現問題?或者你剛收到未經驗證的報告? – 2011-03-07 11:42:16

+0

也許應該是DAY_OF_YEAR而不是DAY_OF_MONTH? – 2011-03-07 11:44:28

回答

2

好了,兩種可能性,我能想到的把我的頭頂部:

  • 在客戶機上的系統日期是不正確的,所以日曆開始在未來
  • 日期如果numberOfDays爲負,這將明顯推動日期到未來

Locale是沒有直接關係的時間段 - 他們是獨立的,雖然很明顯與法國語言環境的機器是可能是在法國時區等

個人而言,我會盡量避免使用日期/日曆完全和使用Joda Time更好的日期和時間API,但止跌」 t幫助我提出的想法之一...

+0

感謝您的回覆。從被告知的日期正確設置,numberOfDays是非負整數。如果沒有提供錯誤原因,我不能真正改變實現,因此不能使用Joda時間。 – Nilesh 2011-03-07 12:03:00

+0

@Nilesh:你可以在*調用'add'(和'numberOfDays'的值)之前打印日期*以用於診斷目的?你與有問題的人有什麼關係? – 2011-03-07 12:04:14

+0

在「add」之前,我可以在本地機器上看到正確的日期;此外,numberOfDays並不是負面的,有這個問題的客戶遠遠不可達,我沒有任何信息/訪問發生這種情況的地方。 – Nilesh 2011-03-07 12:15:28