Разбор строки в дату с шаблоном: "дд / мм / гггг" - PullRequest
2 голосов
/ 29 апреля 2010

Я хочу вставить дату в этом формате MM / dd / YYYY, например: с 29.04.2010 по 29.04.2010, чтобы вставить ее в базу данных mysql в поле типа Дата. Итак, у меня есть этот код:

String dateimput=request.getParameter("datepicker");
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date dt = null;
try
{
     dt = df.parse(dateimput);           
     System.out.println("date imput is:" +dt);
} 
catch (ParseException e)
{
     e.printStackTrace();
}

но это выдает мне ошибку:

Импульс на 1 дату: пт, май 04, 00:00:00 CEST 2012 (неверное введенное значение).

2-несоответствие с типом даты mysql.

Я не могу точно определить ошибку. Пожалуйста, помогите.

Ответы [ 4 ]

4 голосов
/ 29 апреля 2010

Я не очень понимаю, чего вы пытаетесь достичь. Разбор пользовательского ввода в Date? Сохранение даты в поле базы данных MySQL типа date (или datetiteme / timestamp) в виде объекта или в виде строки?

1. Разбор пользовательского ввода

Код, который вы предлагаете, правильно обрабатывает ввод пользователя в java.util.Date при условии, что ввод действительно в ожидаемом формате:

    String dateimput="24/12/2009"; // Christmas Eve
    java.text.DateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy");
    java.util.Date dt = null;
    try
    {
         dt = df.parse(dateimput);           
         System.out.println("date imput is:" +dt); 
        // = "date imput is:Thu Dec 24 00:00:00 CET 2009"
    } 
    catch (java.text.ParseException e)
    {
         e.printStackTrace();
    }

Обратите внимание, что когда Date ничего не знает о формате, используемом для его синтаксического анализа и вывода, когда вы делаете ('... + dt') вызов его toString (), который по умолчанию использует длинный формат даты. Однако нет никаких причин, почему это должно быть проблемой для вас. Если вы хотите записать его в определенном формате, следуйте советам Даниила.

2. Сохранение даты в БД

Если вы сохраняете дату в поле даты / даты / времени с помощью JDBC, у вас есть два варианта:

(A) Использование строкового запроса и оператора

Создайте запрос вставки в виде строки и передайте его в оператор, как показано в:

aConnection.createStatement().executeUpdate(
   "insert into mytable(mydate) values(" + df.format(dt) + ")")

В этом случае вы должны убедиться, что строка даты имеет формат, понятный БД (например, yyyy-mm-dd для DB2).

(B) Использование PreparedStatement

Или, что должно быть безопаснее, потому что это предотвращает внедрение SQL, а также проще, поскольку оно делегирует преобразование типов java в правильную форму базы данных драйверу JDBC БД, используйте подготовленный оператор:

PreparedStatement pstmt = con.prepareStatement(
      "insert into mytable(mydate) values(?)");
pstmt.setDate(1, new java.sql.Date(dt.getTime()))   
1 голос
/ 29 апреля 2010

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

UPDATE

На стороне базы данных вам просто нужно использовать PreparedStatement.setDate () , и вам не нужно беспокоиться о формате.

0 голосов
/ 29 апреля 2010

при попытке DateFormat df = new SimpleDateFormat ("MM / dd / yyyy");это дает мне следующее: Дата ввода: Чт 29 апреля 00:00:00 CEST 2010 Я хочу иметь 29/04/2010 00: 00: 00

При выводе даты также необходимоиспользуйте DateFormat, иначе он просто напечатает то, что возвращается toString ().Вы можете попробовать System.out.println(df.format(dt));

0 голосов
/ 29 апреля 2010

где у вас есть:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 

попробовать

DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...