2013-02-22 32 views
2

是否有一個錯誤是java.util.Date?在做一些測試時,我將毫秒設置爲 2147483647,這應該給我一個2038-01-19 03:14:07的日期,但是它會返回1970-01-25 20:31:23。還試用了4294967295,並得到1970-02-19 17:02:47的錯誤答案。有誰知道一個工作圍繞java.util.date錯誤?

import java.util.*; 
import java.io.*; 


/* 
centos 6.3 x64 
java version "1.7.0_13" 
Java(TM) SE Runtime Environment (build 1.7.0_13-b20) 
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode) 
*/ 


public class Test 
{ 
    static public void main(String args[]) 
    { 
     long ms = 2147483647L; 

     java.util.Date d = new java.util.Date(ms); 

     java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     // SHOULD be 2038-01-19 03:14:07 
     System.out.println(df.format(d));   

     System.out.println(df.format(new Date(Long.MAX_VALUE))); 

     System.out.println("\n" + ms); 
     System.out.println(Long.MAX_VALUE); 
    } 
} 

1970年1月25日20時31分23秒 292278994-08-17 7時12分55秒

回答

12

2147483647毫秒只有約24.8天,所以這就是爲什麼它顯示爲1970-01-25 20:31:23。

4294967295毫秒只有大約49.7天,所以這就是爲什麼它顯示爲1970-02-19 17:02:47。

您可能正在計算基於2147483647秒而不是毫秒的期望值。這不是java.util.Date中的錯誤;將您的秒數值轉換爲以毫秒爲單位的秒數。

+0

這正是他的問題 - 這些值對應於秒,給定他(期望)的時間戳。 – 2013-02-22 00:24:26

+0

謝謝......我在牆上試圖將C++ time_t傳遞給java.util.Date。一旦我做了數學,你建議一切正常。 – user2097530 2013-02-22 05:37:13