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

Java 日期列中插入了错误的日期,java,database,date,Java,Database,Date,我有一个奇怪的情况 在我的应用程序中,当用户访问应用程序中的某些内容时,我们将插入一条带有当前日期(MM/dd/yyyy)的记录 有时,插入的日期值错误,而不是当前日期。(即:“2014年9月21日”、“2180年9月13日”、“2179年8月22日”)。我们正在使用JPA插入来自JAVA的记录。请帮我找出这个问题或解决方案 下面是我准备/传递域对象值的代码 Date curDate = new Date(); SimpleDateFormat sdf = new SimpleDateForma

我有一个奇怪的情况

在我的应用程序中,当用户访问应用程序中的某些内容时,我们将插入一条带有当前日期(MM/dd/yyyy)的记录

有时,插入的日期值错误,而不是当前日期。(即:“2014年9月21日”、“2180年9月13日”、“2179年8月22日”)。我们正在使用JPA插入来自JAVA的记录。请帮我找出这个问题或解决方案

下面是我准备/传递域对象值的代码

Date curDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
UserAccessObj.setAccessedDate(sdf.parse( sdf.format( curDate ) ));
这里,setAccessedDate(日期)是域对象中的java.util.Date setter方法

Date curDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
UserAccessObj.setAccessedDate(sdf.parse( sdf.format( curDate ) ));
那么,问题是什么?我无法追踪问题。

sdf.parse( sdf.format( curDate ) )
绝对必要吗?您要将日期转换为字符串,然后将其解析为日期?我怀疑您这样做是为了去掉(名称错误的)
Date
对象的时间部分?我认为按照使用
日历
类更快/更安全。最好的答案是使用

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

而不是:

UserAccessObj.setAccessedDate(sdf.parse(sdf.format(curDate)));
试试这个:

UserAccessObj.setAccessedDate(curDate);

我认为您可以使用Calendar对象获取当前系统时间

Calendar cal = Calendar.getInstance();
然后将其转换为SimpleDataFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.format(cal.getTime());
然后你就有了自己的代码

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

希望有帮助:)

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

您使用的是什么数据库?什么是点格式并将其解析回最新对象?是否可以在插入数据库之前打印出sdf.parse(sdf.format(curDate))?为什么要将
curDat
(已经是
日期
)转换为字符串,然后再转换回
日期
<代码>UserAccessObj.setAccessedDate(curDate)似乎是您想要的。我假设格式/解析是存储日期的时间组件