2013-03-21 203 views
2

我有一個奇怪的情況。錯誤的日期插入日期列

在我的應用程序中,當用戶訪問應用程序中的某些內容時,我們將插入一條包含當前日期(MM/dd/yyyy)的記錄。

有時日期插入的錯誤值不是當前日期。 (即:'21/09/2014','13/09/2180','22/08/2179')。我們使用JPA從JAVA插入記錄。請幫助我找出問題或解決方案。

下面是代碼,我正在準備/傳遞Domain對象的值。

Date curDate = new Date(); 
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
UserAccessObj.setAccessedDate(sdf.parse(sdf.format(curDate))); 

這裏setAccessedDate(日期)處於域對象java.util.Date setter方法。

那麼,可能是什麼問題?我無法追查這個問題。

+0

您使用的數據庫是? – Anubhab 2013-03-21 09:57:49

+2

什麼是格式化並將其解析回日期對象? – 2013-03-21 09:58:16

+0

是否可以在插入數據庫之前打印出sdf.parse(sdf.format(curDate))? – 2013-03-21 09:58:54

回答

0

sdf.parse(sdf.format(curDate)) 

嚴格必要嗎?你正在取一個日期,將它轉換爲一個字符串,然後將它解析爲一個日期?我懷疑你是這樣做的,以擺脫(誤導性命名的)Date對象的時間組件?我認爲根據the answer in this thread使用Calendar類更快/更安全。最好的答案是使用Joda-Time API

我不知道它是否會導致您的問題,但它增加了不必要的複雜性。還要注意,SimpleDateFormat不是線程安全的,並且如果上述代碼共享肯定會導致特殊行爲的SimpleDateFormat的實例。 Joda-Time再一次爲這個領域提供了線程安全性。

1

取而代之的是:

UserAccessObj.setAccessedDate(sdf.parse(sdf.format(curDate))); 

試試這個:

UserAccessObj.setAccessedDate(curDate); 
0

我覺得你可以做的是使用Calendar對象拿到當前系統時間

Calendar cal = Calendar.getInstance(); 

和然後將其轉換爲SimpleDateFormat。

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
dateFormat.format(cal.getTime()); 

,然後你有你自己的代碼

UserAccessObj.setAccessedDate(sdf.parse(sdf.format(curDate))); 

希望它能幫助:)

0

保存輸入的日期到數據庫的格式如下:「YYYY-MM-DD」。正確的日期將被保存。