我正在尝试通过在当前日期创建一个Calendar对象来创建一个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)
我知道我做的事情完全是愚蠢的,但我无法弄清楚是什么,也不知道解决方法是什么。
谢谢
唐纳德。
答案 0 :(得分:4)
用
替换上面的所有代码def currentDay = {
def todayDate = new java.sql.Date(new Date().time)
todayDate.clearTime()
[today: todayDate]
}
答案 1 :(得分:1)
为什么要转换为字符串?只需确保您的Calendar
包含所需的字段值,然后调用
new java.sql.Date(calendar.getTime().getTime());
或者,鉴于你只需要毫无道理,我会尝试尽可能使用Joda Time - 它比操作日历,IMO更容易。您可以非常轻松地从Joda Time instant(或其他)转换为long
值。
答案 2 :(得分:0)
java.sql.Date.valueOf(String date)会抛出IllegalArgumentException。您提供的日期格式为yyyy-m-dd(1-9只有一个月的数字),因此无效。
作为一种解决方法,使用SimpleDateFormat获取两个月的月份或直接使用日期而不使用Jon Skeet建议的中间字符串转换。