2011-01-31 52 views
1

我試圖通過在當前日期創建一個Calendar對象來創建一個sql.Date。這是推動我瘋了,如果我硬編碼的日期作爲字符串每一件事情是好的:Grails - java.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) 

我知道我在做一些完全愚蠢的,但我想不出什麼,也沒有什麼解決方法可能是。

謝謝

唐納德。

回答

4

替換上面所有的代碼

def currentDay = { 

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

    [today: todayDate] 
} 
1

爲什麼你要轉換成字符串呢?只要確保你的Calendar有您需要的字段值,然後調用

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

另外,因爲你只需要米利斯是正確的,我會嘗試,如果在所有可能使用Joda Time - 它會比操作日曆更容易。你可以很容易地從喬達時間瞬間(或其他)轉換成long值。

0

如果給定的日期不是JDBC日期轉義格式(yyyy-mm-dd),java.sql.Date.valueOf(String date)將拋出IllegalArgumentException。您提供的日期格式爲yyyy-m-dd(1-9只有一位數字),因此它是無效的。

作爲一種解決方法,使用SimpleDateFormat得到一個兩位數的月份,或者直接使用沒有中間字符串轉換的日期,就像Jon Skeet所建議的那樣。