Вопрос по java, date – Неразборчивая дата: «30 июня 12»

2

Я использую метод Java для преобразования даты в подходящий формат:

private Timestamp toTimeStamp(String s) throws java.text.ParseException
    {
        Timestamp ts = null;
        java.util.Date date = null;
        if (s == null || s.trim().isEmpty()) return ts;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
        date = (java.util.Date) sdf.parse(s);
        ts = new Timestamp(date.getTime());

        return ts;

    }

Когда я пытался выполнить форму, я получаю эту ошибку:

Unparseable date: "30-Jun-12"

Я пытался изменить формат даты, но я все еще получаю эту ошибку. Можете ли вы помочь мне исправить это?

вау, ты напугал меня Я думал, что сегодня 30 июня. Nishant

Ваш Ответ

3   ответа
8

Your date format pattern is wrong. The yyyy-MM-dd hh:mm:ss.S can never match 30-Jun-12. You need dd-MMM-yy. See also SimpleDateFormat javadoc. When parsing day/month names, make sure that you specify the right locale matching the language used in the day/month names. Your system default locale seems to be not English at all.

Так что это должно сделать:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH);
Date date = sdf.parse("30-Jun-12");

Третья проблема, которая на самом деле больше касается дизайна, вы не должны использоватьjava.sql.Timestamp (и другие специфические типы SQL) в любом месте вашего уровня модели / бизнеса (вы изначально пометили вопрос JSF). Вы должны использовать его только на своем уровне данных. использованиеjava.util.Date вместо этого и конвертировать только в тот момент, когда вам нужно сохранить его в БД, как это

preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));
& quot; Язык вашей системы по умолчанию, похоже, совсем не английский. & quot; - это была именно моя проблема! Спасибо, что сэкономили много времени.
1

Вы проходите дату в формате30-Jun-12 тогда вы должны использовать формат

dd-MMM-yy

сSimpleDateFormat

Я проверил это, но это не работает. Может быть, причина в Oracle? user1285928
Я думаю, что проблема в методе JavatoTimeStamp - дата из javascript не может быть проанализирована user1285928
0

попробуйте изменить предпочтительные языковые настройки в настройках браузера. Разные страны имеют разный формат даты, между европейскими странами и США есть большая разница, поэтому попробуйте в вашем браузере (например, Firefox):

Tools => Options => Content => Choose preferable language 

Убедитесь, что при настройке приложения в браузере языковая панель на панели задач показывает желаемый язык.

Если веб-приложение не так: Проверьте региональные настройки и предпочтительные языковые настройки.

Похожие вопросы