apache poi语言版本导致日期格式误解

时间:2013-08-26 07:59:16

标签: java excel apache-poi

编辑: 为避免混淆,这是我原来问题的(再次)改进版本:

问题 我怎么能像Microsoft Excel一样显示单元格的字符串表示,而不知道格式化设置的相应硬编码(例如使用单元格自己的格式设置来格式化输出)。

回答 如果你使用的是美国版本的excel,对于所有其他版本,这将是没有问题的.Pache POI将返回相当于美国版excel将如何显示它的字符串,并且Apache POI中没有内置方式可以更改这个。我可以确认的唯一方法是“工作” - 正如Gagravarr建议的那样 - 将Mac上的语言切换为US / EN。然后Apache POI和Excel将提供相同的结果。这是一种反向解决方案。

问题是:在德语版的excel中,单元格显示为01.12.13,但由于格式为日期

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

给我一​​个21/01/13的val。


最初的问题是:

我有一个xlsx文件,其中包含在Excel中显示的日期字段

01.12.13使用单元格TT.MM.JJ

的格式设置

如果我用apache poi读取相同的文件,获取单元格并格式化

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

cellIter当然是一个有效的迭代器,简化示例)

我的val原来是21/01/13。据我所知,HSFDataFormatter的方法formatCellValue()应返回使用单元格格式设置格式化的值的String。

有人知道如何让val包含与Excel相同的格式吗?

我感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以自定义日期格式,如下所示:

HSSFCell cell = (HSSFCell) cellIter.next();
SimpleDateFormat DtFormat = new SimpleDateFormat("dd.MM.YY");
Date date=cell.getDateCellValue();
System.out.println(DtFormat.format(date).toString());

这将打印值为21.01.13。