我正在使用JXL和Groovy阅读Excel电子表格,如下所示:
WorkbookSettings settings = new WorkbookSettings();
settings.encoding = "Cp1252"
settings.locale = new Locale("pt", "BR")
Workbook workbook = Workbook.getWorkbook(is, settings)
Sheet sheet = workbook.getSheet(0)
然后我在Excel中有一个单元格,其值为 09/01/2013 (dd / mm / yyyy)。但是,当我检索单元格内容时,JXL会自动进行一些转换并将其返回给我:
"09/01/13" == sheet.getCell(col, line).contents?.trim()
但是,当我将Cell转换为DateCell时,“09/01/13”的日期表示形成为2013年1月8日(!):
DateCell dc = ((DateCell) sheet.getCell(col, line))
println "date from JXL: ${dc.date}" // prints Tue Jan 08 22:00:00 BRST 2013
有人会对如何解决此问题有任何想法吗?如果我可以直接检索实际的单元格内容(09/01/2013),那么我可以自己完成所有转换内容。
谢谢!
答案 0 :(得分:1)
来自:http://www.andykhan.com/jexcelapi/tutorial.html#dates
显示日期时,java.util包会自动调整本地时区。这可能会导致在应用程序中显示日期时出现问题,因为日期看起来好像是存储在Excel电子表格中的日期之前的一天,尽管实际情况并非如此。
...
解决此问题的最简单方法(以及jxl.DateCell的getContents()方法在内部使用的方法)是强制日期格式的时区如下:
TimeZone gmtZone = TimeZone.getTimeZone("GMT"); SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy"); format.setTimeZone(gmtZone); DateCell dateCell = .... String dateString = format.format(dateCell.getDate());