日期列中插入了错误的日期

时间:2013-03-21 09:55:42

标签: java database date

我有一个奇怪的情况。

在我的应用程序中,当用户访问应用程序中的某些内容时,我们将插入一个包含当前日期(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 (Date)是域对象中的java.util.Date setter方法。

那么,问题可能是什么?我无法追查这个问题。

4 个答案:

答案 0 :(得分:1)

而不是:

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

试试这个:

UserAccessObj.setAccessedDate(curDate);

答案 1 :(得分:0)

sdf.parse( sdf.format( curDate ) )

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

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

答案 2 :(得分: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 ) ));

希望有所帮助:)

答案 3 :(得分:0)

以这种格式将输入日期保存到数据库中:“yyyy-MM-dd”。将保存正确的日期。