错误的日期插入日期列

问题描述:

我有一个奇怪的情况。错误的日期插入日期列

在我的应用程序中,当用户访问应用程序中的某些内容时,我们将插入一条包含当前日期(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

sdf.parse(sdf.format(curDate)) 

严格必要吗?你正在取一个日期,将它转换为一个字符串,然后将它解析为一个日期?我怀疑你是这样做的,以摆脱(误导性命名的)Date对象的时间组件?我认为根据the answer in this thread使用Calendar类更快/更安全。最好的答案是使用Joda-Time API

我不知道它是否会导致您的问题,但它增加了不必要的复杂性。还要注意,SimpleDateFormat不是线程安全的,并且如果上述代码共享肯定会导致特殊行为的SimpleDateFormat的实例。 Joda-Time再一次为这个领域提供了线程安全性。

取而代之的是:

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

试试这个:

UserAccessObj.setAccessedDate(curDate); 

我觉得你可以做的是使用Calendar对象拿到当前系统时间

Calendar cal = Calendar.getInstance(); 

和然后将其转换为SimpleDateFormat。

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

,然后你有你自己的代码

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

希望它能帮助:)

保存输入的日期到数据库的格式如下:“YYYY-MM-DD”。正确的日期将被保存。