Grails - недопустимые аргументы для java.sql.Date - PullRequest
1 голос
/ 01 февраля 2011

Я пытаюсь создать sql.Date путем создания объекта Calendar на текущую дату.Это сводит меня с ума, если я жестко закодировал дату в виде строки, все в порядке:

def dat = java.sql.Date.valueOf("2011-01-31");

Но, если я создаю ту же строку в коде, я получаю ошибку недопустимого аргумента.

def currentDay  = {

    def today = Calendar.getInstance();

    def dateYear = today.get(Calendar.YEAR);
    def dateMonth = today.get(Calendar.MONTH) + 1;
    def dateDay =today.get(Calendar.DATE);

    def todayDate = (dateYear + "-" + dateMonth + "-" + dateDay);
    def todayDateString = todayDate.toString();
    def todayDate2 = java.sql.Date.valueOf(todayDateString);

    [ today : todayDate2 ]
}

Выполнение этого приводит к получению этой трассировки стека:

java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Date.java:138)
    at java_sql_Date$valueOf.call(Unknown Source)
    at samma.TapesController$_closure7.doCall(TapesController.groovy:178)
    at samma.TapesController$_closure7.doCall(TapesController.groovy)
    at java.lang.Thread.run(Thread.java:619)

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

Спасибо

Дональд.

Ответы [ 3 ]

4 голосов
/ 01 февраля 2011

Заменить весь код выше на

def currentDay  = {

    def todayDate = new java.sql.Date(new Date().time)
    todayDate.clearTime()

    [today: todayDate]
}
1 голос
/ 01 февраля 2011

Почему вы вообще конвертируете в строку?Просто убедитесь, что ваш Calendar имеет значения полей, которые вы хотите, и затем вызовите

new java.sql.Date(calendar.getTime().getTime());

В качестве альтернативы, учитывая, что вам просто нужно миллис, чтобы быть правым, я бы попытался использовать Joda Time если это вообще возможно - это будет проще, чем манипулирование календарем, ИМО.Вы можете легко преобразовать момент времени Joda Time (или любой другой) в значение long.

0 голосов
/ 01 февраля 2011

java.sql.Date.valueOf (String date) генерирует исключение IllegalArgumentException, если указанная дата не находится в escape-формате даты JDBC (гггг-мм-дд).Дата, которую вы предоставляете, имеет формат гггг-м-дд (только одна цифра месяц для 1-9), поэтому она недопустима.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...