2013-03-21 2 views
2

У меня странная ситуация.Неправильно Дата, указанная в столбце Дата

В моем приложении мы вставляем запись с текущей датой (MM/dd/yyyy), когда пользователи получают доступ к чему-либо в приложении.

Иногда дата вставляется с неправильным значением, которое не является текущей. (Ie: '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 метод установки в объекте домена.

Итак, что может быть проблемой? Я не могу проследить эту проблему.

+0

В чем вы работаете? – Anubhab

+2

Что такое форматирование точки и разбор его обратно на объект Date? –

+0

Вы можете распечатать sdf.parse (sdf.format (curDate)) перед вставкой в ​​базу данных? –

ответ

0

ли

sdf.parse(sdf.format(curDate)) 

строго необходимо? Вы принимаете дату, конвертируете ее в строку и затем разбираете ее как дату? Я подозреваю, что вы делаете это, чтобы избавиться от временной составляющей объекта (вводящего в заблуждение) Date? Я думаю, используя класс Calendar согласно the answer in this thread быстрее/безопаснее. Лучший ответ - использовать Joda-Time API.

Я не знаю, вызывает ли это вашу проблему, но это добавляет излишнюю сложность. Обратите также внимание на то, что SimpleDateFormat не является потокобезопасным, и если приведенный выше код содержит экземпляр SimpleDateFormat, который определенно объясняет свое поведение. Опять же, Joda-Time обеспечивает безопасность потоков в этом домене.

1

Вместо этого:

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

Попробуйте это:

UserAccessObj.setAccessedDate(curDate); 
0

Я думаю, что вы можете сделать, это объект использовать календарь, чтобы получить время тока системы

Calendar cal = Calendar.getInstance(); 

и затем преобразуйте его в SimpleDateFormat.

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

, а затем у вас есть свой собственного код

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

Надеется, что это помогает :)

0

Сохранить дату ввода в БД в следующем формате: "гггг-ММ-дд". Правильная дата будет сохранена.

Смежные вопросы