2012-02-17 32 views
1

我,如果有任何陷阱或像這樣與普通的Java new Date()新的Date()的結果並不總是正確

我用它在我的應用程序來獲得當前時間戳疑惑。

但是,我看到(有時)結果出現了失誤。像那些來自未來的日期..任何想法爲什麼這樣的事情可能會發生?我還使用以下功能將此數據轉換與串..

enter image description here

private final static SimpleDateFormat databaseDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

static 
    { 
     databaseDateFormat.setTimeZone(TimeZone.getTimeZone("gmt")); 
    }  

    public static String getDateConvertedToUTCDBString(Date date) 
     { 
      return databaseDateFormat.format(date); 
     } 


     public static Date getDateConvertedFromDBString(String date) 
     { 
      try 
      { 
       return localDatabaseDateFormat.parse(date); 
      } 
      catch(java.text.ParseException e) 
      { 
       return null; 
      } 
     } 

回答

3

的SimpleDateFormat不是線程安全的,所以一定要確保你不會從不同的使用相同的實例線程,否則數據解析可能會失效。您可以使用ThreadLocal爲每個線程創建SimpleDateFormat實例。

+0

賓果! http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html – katit 2012-02-17 04:52:27

+0

這是Fortify曾經爲我抓過的唯一有用的東西。這是完全正確的。 – Bishnu 2012-02-17 05:15:37