2013-12-14 50 views
4

我很難過。這對我來說沒有意義。下面的代碼:不同的長整型值會產生相同的時間

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
long lFirst = 1383460981000L; 
long lSecond = 1383464581000L; 
System.out.println(lFirst); 
System.out.println(lSecond); 

java.util.Date first = new Date(lFirst); 
java.util.Date second = new Date(lSecond); 

System.out.println(sdf.format(first)); 
System.out.println(sdf.format(second)); 

System.out.println(first.getTime()); 
System.out.println(second.getTime()); 

System.out.println("Diff" + (first.getTime() - second.getTime())); 

System.out.println("Hours diff: " + (((float)(second.getTime()-first.getTime()))/1000f/60f/60f)); 

產生以下輸出:

1383460981000 
1383464581000 
2013-11-03 01:43:01.000 
2013-11-03 01:43:01.000 
1383460981000 
1383464581000 
Diff-3600000 
Hours diff: 1.0 

如何這兩個不同的長值產生完全相同的日期?我在執行從一種數據庫類型到另一種數據庫的數據遷移並驗證結果時遇到了這個問題。我無法理解我所看到的驗證失敗,所以我創建了一小段代碼來比較這些值,並且足夠肯定。雖然我願意接受我的數據庫中存在一些時區怪異現象,但在這段代碼示例中似乎沒有任何問題。

+0

沒有必要在標題中添加主標籤。 –

+0

該代碼不一定會生成該輸出。在我的系統中,它與DateFormats不同,以及許多其他Java庫類具有依賴於當前使用環境的方法。爲了規避您必須明確指定時區,字符集等。 – andi5

+0

你在什麼時區,或者更確切地說,你的電腦設置了什麼時區? –

回答

6

這可能是夏令時變化的時刻:時間從凌晨1點到凌晨2點,並且又回到凌晨1點。所以,如果你加一個小時到1:43:01,你會回到1:43:01。

1

這發生在從夏令時到冬令時的過渡期間。

由於時鐘改回了一個小時,您將得到一個小時的重複兩次的時間戳。

當過渡發生在春天的另一種方式時,有一小時的「缺失」時間戳值。

相關問題