2012-06-28 115 views
0

爲什麼如果我將日期從毫秒轉換爲日期,然後再轉回,從日期轉換爲毫秒,那麼該日期會發生變化?Java中的日期轉換

例如:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = format.parse("2012-06-02"); 
System.out.println(date); 
Long dateAsDays = TimeUnit.MILLISECONDS.toDays(date.getTime()); 

System.out.println(
    new Date(
     TimeUnit.DAYS.toMillis(dateAsDays) 
    )); 

將被打印:

週六6月2日00:00:00 GMT + 03:00 2012

星期五6月1日3點00分○○秒格林威治標準時間+ 03:00 2012

我如何在這個轉換中保存月份的一天?爲什麼這段代碼無法正常工作?

+1

日期/時間的問題,您應該使用[喬達](HTTP://喬達時間.sourceforge.net /)項目,它提供了處理日期,時間和時間戳操作的簡單方法。 –

+1

如果您有選擇,可以使用JODA而不是內置的Java日期設施,這些設施已經有點破了。 –

+0

感謝您使用Joda的建議 – Kot4

回答

2

日期變得不太準確,當你得到它在幾天。你在格林威治標準時間+3,所以格林威治標準時間12:00是你的3點。從TimeUnit class reference

轉換

衆長轉換(長sourceDuration, TIMEUNIT sourceUnit)

轉換給定的時間段在給定單位到本機。 從較細到較粗粒度的轉換截斷,因此失去精度。例如,將999毫秒轉換爲秒導致0。從粗粒度到更細粒度的轉換,其中參數在數字上會溢出,如果爲負,則飽和爲Long.MIN_VALUE,如果爲負,則爲Long.MAX_VALUE。 例如,10分鐘轉換爲毫秒,使用方法:TimeUnit.MILLISECONDS.convert(10L,TimeUnit.MINUTES)

+0

該方法的使用導致了一個例子中出現的問題。猜測,'TimeUnit'工具的使用不允許進行所需的轉換。 – Kot4