2015-08-21 40 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'