2015-08-21 43 views
1

我已經在這裏看到過一些Unparseable Date錯誤,但我的似乎沒有任何意義。我正在上傳一個CSV文件,該文件將顯示在網頁的一個表格中(我知道的很多並且很容易),並且我試圖找到一種方法在單元格中獲取日期並將其從其轉換本地字符串格式轉換爲日期。Grails「Unparseable Date」錯誤

下面的代碼:

 def line = f.inputStream.toCsvReader(['skipLines':1]).eachLine{fields -> 
     List list = new List() 
     list.item = fields[0].trim() 
     String checkedOut = fields[1].trim() 
     String returned = fields[2].trim() 
     Date c = Date.parse('E MM/dd/yy', checkedOut) 
     Date r = Date.parse('E MM/dd/yy', returned) 
     list.lastCheckedOut = c 
     list.lastReturned = r 
     list.checkedOutBy = fields[4].trim() 
     list.save flush: true 
     return 
    } 

這裏的堆棧跟蹤

Error 2015-08-21 16:13:38,936 [http-bio-8080-exec-7] ERROR errors.GrailsExceptionResolver - ParseException occurred when processing request: [POST] /inventory/list/upload - parameters: 
upload: Upload 
Unparseable date: "9/22/94". Stacktrace follows: 
Message: Unparseable date: "9/22/94" 
    Line | Method 
->> 357 | parse  in java.text.DateFormat 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  27 | doCall in org.ListController$_upload_closure1$$EPM22klU 
|  34 | eachLine in org.grails.plugins.csv.CSVReaderUtils 
| 126 | doCall in CsvGrailsPlugin$_closure4$_closure8 
|  22 | upload . in org.ListController$$EPM22klU 
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run  in java.lang.Thread 

的日期 「字段[1]」 是94年9月22日,我不完全知道什麼是召開問題在於,我讀過的所有內容似乎都表明這應該起作用。

回答

3

嘗試添加該到您的域名:

@BindingFormat('yyyy-MM-dd') 
Date lastCheckedOut 

,並設置屬性是這樣的:

list.lastCheckedOut = Date.parse('E MM/dd/yy', checkedOut).format('yyyy-MM-dd') 

編輯:你需要做以下導入到你的域類:

import org.grails.databinding.BindingFormat 
+0

酷,這工作,謝謝! –

0

如果刪除'E',它會解析。它不在日期字符串中提供。

Date c = Date.parse('MM/dd/yy', checkedOut) 
Date r = Date.parse('MM/dd/yy', returned) 

assert Date.parse('MM/dd/yy', "9/22/94").toString() == 'Thu Sep 22 00:00:00 EDT 1994'