2012-05-16 158 views
3

导出为CSV时是否有办法保留日期格式?我有一个GWT应用程序。我的日期数据为例如03-01-2012和02-2012。成功导出为CSV后,当我打开CSV文件时,这些日期现在分别为2012年3月1日和2012年2月1日。有没有办法控制它们在CSV中的外观?我调试并在代码被导出并且日期正确之前执行了代码。我会很感激任何帮助。如何在CSV导出期间保留日期格式

+0

1.)您使用什么程序打开CSV文件(纯文本编辑器,或者更像Excel/OpenOffice Calc)? 2.)你用什么库来编写CSV? –

+0

1.)我默认使用Excel,这可能是大多数客户端默认使用的打开导出文件的方式。 2.)我没有使用任何类型的特殊库来写入CSV。我只是使用com.google.gwt.i18n.client.DateTimeFormat格式化日期,因为日期在应用程序中正确显示,但不在Excel中。 – jax502

+0

不确定是否有办法从Java控制Excel的单元格格式。因为我注意到Excel中的公式栏显示了我想要的日期格式,但没有保存日期的单元格。 – jax502

回答

0

据我所知,这是使用CSV时,无法控制在Excel中显示日期的方式(只能由Excel用户的设置进行控制)。我们遇到了类似的问题(电话号码),唯一可行的解​​决方法是使用Excel格式。我们使用Apache POI来编写.xls文件[*],我们可以在其中设置单元类型为文本。

至少对于电话号码,这是必要的 - 否则Excel会丢弃前导0,并将它们视为数字(使其无法区分国内和国际电话号码)。然而,对于日期,或许值得考虑,如果最好让用户决定如何显示日期?

[*]我们还提供下载.csv文件,警告他们用Excel打开时不理想。

+0

注意:甚至可能在您的情况下控制日期单元格的显示样式(而不是使用文本单元格)。请参阅http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells(但我没有测试过,所以这只是一条评论) –

+0

是的,我之前正在和另一位程序员讨论这个问题,我们有点儿决定在这一点上,它就是这样。我看了一下你建议的Apache POI,看来只需要做更多的工作就可以完成一件小事。我只是想确定是否有更简单的方法。无论如何,非常感谢您的帮助! – jax502

4

你应该看看java.text.SimpleDateFormat的

+1

'新的SimpleDateFormat(“dd-MM-yyyy”).format(theDate)'应该做你想做的事 – Jamie

+0

我们使用com.google.gwt.i18n.client.DateTimeFormat类。例如DateTimeFormat.getFormat(“MM-dd-yyyy”)将返回一个字符串,将日期格式设置为“03-01-2012”并将其显示在应用程序的屏幕中。然后我们将该字符串与其他数据一起放入字符串缓冲区中。在这一点上,我仍然可以看到日期字符串仍然显示正确的格式。但是,当我打开CSV文件时,日期格式化为Excel所希望的。我不确定是否有办法从java中告诉Excel我想为这些日期单元格使用某种格式。 – jax502

0

每当你使用日期工作,并要保持笑容在你的脸上,同时工作,使用Joda Time

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendMonthOfYear(2) 
          .appendDayOfYear(2).appendYear(4, 4).toFormatter(); 
LocalDate d = LocalDate.parse(dateStr, formatter); 
Date yourJavaDate = d.toDate(); 
... // work with java date (if needed! :( 
LocalDate outgoing = new LocalDate(yourJavaDate.getTime()); 
String myOutStr = outgoing.toString(formatter); 
+0

谢谢。我想我正在使用类似的东西,它的效果很好。我认为这个问题是Excel打开时的问题。 Excel中的公式栏将显示我的DateTimeFormat类生成的正确格式,但保存该日期的单元格将以不同的格式显示它。所以我不确定是否有办法通过Java应用程序告诉Excel以某种方式格式化日期。 – jax502

1

你不能(据我所知)在CSV文件中传递元信息。因此,要按照发送方式查看日期,可以通过以下方式之一传递它(数据值在逗号之间):

,03-01-2012, ,=“03-01- 2012" ,

0

日期值

即样本查询低于之前只需使用空格

select ' '||to_char(mydatecolumn,'YYYY-MM-DD HH:MI:SS AM') DATEVALUE from mytable; 

尝试将数据导出为CSV,将它保存在相同的格式,因为它正在出口因为TEXT和EXCEL会将其视为TEXT,因此不会将其更改为默认的EXC EL日期格式。

相关问题