Java Calendar 取日期時間推遲了一個月


 

5月31日的時候,很多Java的test case都莫名其妙的fail了。報的錯誤大意是“結束時間格式不對”。

通過debug發現實際發送的結束時間為6月31日,當然不對了,6月哪兒來的31日呢。結束時間是通過獲取當前,然后+2個月作為結束時間。

設置時間是通過java.util.Calendar類來實現的。用Calendar.getInstance(TimeZone.getTimeZone("GMT"))來實現的。查了一下java的API,用法沒錯,確實是取的系統當前時間。但打印出來結果一看,取的時間比當前系統時間早了一個月,即取出來的是4月31日,開始以為是testcase初始化的時候修改了什么配置,找了半天也沒發現。換成GeogiaCalendar也不好使,把Calendar.add換成Calendar.roll也不靈,后來搜索了一會兒也沒,終於發現問題:

java.util.Calendar的month是'zero based index',即使從0開始的,1月份的時候,Month字段的值為0,1月份為1,以此類推。所以Calendar取當前時間,年和日期都對,唯獨月份少了1個月。所以在使用Calendar的月份值的時候,應該是calendarEnd.get(Calendar.MONTH) + 1,才能獲取正確的月份。

雖然0 based index是大部分編程語言的標准,但是用在月份上,實在不大人性化。好久不用java,也不知道有沒有更好的類來獲取當前日期。

另,雖然可以用Date來取日期,但是查了一下,Date貌似不支持+/-時間的操作,譬如取某日期后兩個月的日期,就不方便了。

而且我搜了好幾個Calendar類的用法,都只是簡單說了一下它的幾個方法,但都沒提及Month值是從0開始的,這點需要注意,尤其是習慣了.NET的DateTime之后。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM