2013-01-13 98 views
2

我有日期解析問題。在我的應用程序中,我從服務器中檢索新評論。檢索的紀元長時間戳是正確的,但是當我嘗試將它們保存到sqlite數據庫時,有時最後的註釋會解析錯誤的日期。Android SimpleDateFormat解析錯誤

的SimpleDateFormat:

this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
this.dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 

解析:

Log.v("GET COMMENT TIME A", ""+cu.getString(cu.getColumnIndex("creation_time"))); 
try { 
    Log.v("GET COMMENT TIME B",""+dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time")))); 
    c.setCreation_time(dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time")))); 
    Log.v("GET COMMENT TIME C", ""+c.getCreation_time()); 
} catch (ParseException e) {} 

的logcat: 先前的評論解析GOOD

01-13 13:01:58.009: V/GET COMMENT TIME A(10536): 2013-01-13 12:01:37 
01-13 13:01:58.017: V/GET COMMENT TIME B(10536): Sun Jan 13 13:01:37 CET 2013 
01-13 13:01:58.017: V/GET COMMENT TIME C(10536): Sun Jan 13 13:01:37 CET 2013 

的logcat: 最後的評論解析錯誤的:

01-13 13:01:58.064: V/GET COMMENT TIME A(10536): 2013-01-13 12:01:41 
01-13 13:01:58.064: V/GET COMMENT TIME B(10536): Sun Jan 13 13:01:41 CET 2013 
01-13 13:01:58.064: V/GET COMMENT TIME C(10536): Tue Jan 01 13:01:41 CET 2013 

所以,當你看到logcat的GET註釋時間B和C,你可以看到,

dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time"))) 

第一返回修正解析時間與1號線進一步將其解析另一個錯誤的時間?或者爲什麼getCreation_time()有時會返回錯誤的解析日期?

編輯: 評論只是有吸氣ANS制定者

public Date getCreation_time() { 
    return creation_time; 
} 

public void setCreation_time(Date creationTime) { 
    this.creation_time = creationTime; 
} 
+1

奇怪的行爲,但你可以通過隔離讓你創建時間的getter/setter手柄'String's(不'Date's)的問題,那麼只需將它設置成'cu.getColumnIndex( 「CREATION_TIME」)'讓你的dateFormat解析存儲的字符串? – saschoar

回答

2

因此,解析2倍完全相同的String有時會給出不同的結果?我能想到的唯一原因是SimpleDateFormatis not threadsafe
是否頻繁?如果使用變量而不是實例字段會發生什麼?

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
Log.v("GET COMMENT TIME A", ""+cu.getString(cu.getColumnIndex("creation_time"))); 
try { 
    Log.v("GET COMMENT TIME B",""+dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time")))); 
    c.setCreation_time(dateFormat.parse(cu.getString(cu.getColumnIndex("creation_time")))); 
    Log.v("GET COMMENT TIME C", ""+c.getCreation_time()); 
} catch (ParseException e) {} 
+0

aha,這可能是,gonne在使用線程安全SimpleDateFormat後檢查這個 – noxius

+0

這個問題還沒有再次發生,所以我接受了這個答案。謝謝! – noxius