Grails-java.sql.Date的非法参数

Grails-java.sql.Date的非法参数,grails,groovy,Grails,Groovy,我试图通过在当前日期创建日历对象来创建sql.Date。这让我抓狂,如果我将日期硬编码为字符串,一切都很好: def dat = java.sql.Date.valueOf("2011-01-31"); 但是,如果我在代码中创建相同的字符串,就会得到一个非法的参数错误 def currentDay = { def today = Calendar.getInstance(); def dateYear = today.get(Calendar.YEAR); def

我试图通过在当前日期创建日历对象来创建sql.Date。这让我抓狂,如果我将日期硬编码为字符串,一切都很好:

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)
我知道我在做一些完全愚蠢的事情,但我不知道该做什么,也不知道该如何解决

谢谢


唐纳德。

为什么要转换成字符串?只需确保您的
日历
具有所需的字段值,然后调用

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

或者,考虑到你只需要毫秒是正确的,如果可能的话,我会尝试使用它——这比操纵日历更容易,依我看。你可以很容易地从一个Joda时间瞬间(或任何东西)转换成一个
长的
值。

为什么要转换成字符串?只需确保您的
日历
具有所需的字段值,然后调用

new java.sql.Date(calendar.getTime().getTime());
或者,考虑到你只需要正确的毫秒数,我会尽可能地使用它——这比操作日历更容易,依我看。你可以很容易地将Joda时间瞬间(或任何东西)转换为
长的
值。

java.sql.Date.valueOf(String-Date)如果给定的日期不是JDBC日期转义格式(yyyy-mm-dd),则引发IllegalArgumentException。您提供的日期格式为yyyy-m-dd(1-9只有一位数的月份),因此无效

作为一种解决方法,可以使用SimpleDataFormat获得两位数的月份,或者直接使用日期,而不使用Jon Skeet建议的中间字符串转换。

java.sql.Date.valueOf(String Date)如果给定的日期不是JDBC日期转义格式(yyyy-mm-dd),则抛出IllegalArgumentException。您提供的日期格式为yyyy-m-dd(1-9只有一位数的月份),因此无效


作为一种解决方法,可以使用SimpleDataFormat获得两位数的月份,或者直接使用日期,而无需像Jon Skeet建议的那样进行中间字符串转换。

将上述所有代码替换为

def currentDay  = {

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

    [today: todayDate]
}

将上面的所有代码替换为

def currentDay  = {

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

    [today: todayDate]
}