Grails-java.sql.Date的非法参数
我试图通过在当前日期创建日历对象来创建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
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]
}