CSV / Excel的最佳时间戳格式?
我正在写一个CSV文件。 我需要写出时间戳至less精确到秒,最好是毫秒。 CSV文件中时间戳的最佳格式是什么,这样可以通过Excel以最less的用户干预来准确无误地parsing它们?
对于第二个准确性,yyyy-MM-dd HH:mm:ss应该做的。
我相信Excel不是很好,只需要几分之一秒(与COM对象IIRC进行交互时会丢失它们 – 我会尽量find一个引用并在此处发布)。
早先的build议使用“yyyy-MM-dd HH:mm:ss”很好,但是我相信Excel的时间分辨率比那更好。 我觉得这个post是相当可信的(按照线程,你会看到很多的算术和Excel实验),如果是正确的,你会有你的毫秒。 你可以在最后加小数点,例如“yyyy-mm-dd hh:mm:ss.000”。
您应该意识到,Excel可能不一定会格式化数据(没有人为干预),您将看到所有这些精确性。 在我工作的计算机上,当我用“yyyy-mm-dd hh:mm:ss.000”数据(手工使用记事本)设置CSV时,在单元格中获得“mm:ss.0”,“m / d / yyyy hh:mm:ss AM / PM“。
为了在没有人为干预的情况下在单元格中传递最大信息[1],您可能需要将时间戳分为date部分和时间部分,时间部分仅为秒。 在我看来,Excel想给你最多三个可见的“级别”(其中一小部分是他们自己的级别)在任何给定的单元格中,而且你想要七个:年,月,日,时,分,秒,和几分之一秒。
或者,如果您不需要时间戳是人类可读的,但您希望它尽可能准确,那么您可能更喜欢只存储一个大数字(在内部,Excel仅使用天数,包括小数天数,因为是“纪元”date)。
[1]就是数字信息。 如果你想看到尽可能多的信息,但不关心计算,你可以制定一些Excel的格式,一定要parsing为一个string,因此, 例如“yyyymmdd.hhmmss.000”。
“yyyy-MM-dd hh:mm:ss.000”格式在所有语言环境中都不起作用。 对于某些(至less丹麦语)“yyyy-MM-dd hh:mm:ss,000”会更好。
我相信,如果你使用double
数据types,Excel中的重新计算将工作得很好。
至于时区。 我必须将UTC偏移量存储为UTC中的秒数,这样Excel / OpenOffice中的公式才能最终本地化date时间。 我发现这比存储前面有0的任何数字要容易。 -0900在任何电子表格系统中都没有很好地parsing,导入它几乎不可能培训人们去做。
转到控制面板中的语言设置,然后select格式选项,select一个语言环境,并查看Windows默认使用的所选语言环境的实际date格式。 是的,该时间戳格式是区域设置敏感的。 ExcelparsingCSV时使用这些格式。
更进一步,如果语言环境使用ASCII以外的字符,则必须在相应的Unicode之前的Windows“ANSI”代码页(例如CP1251)中发出CSV。 Excel将不接受UTF-8。
“yyyy-mm-dd hh:mm:ss.000”格式在所有语言环境中都不起作用。 对于一些(至less丹麦语)“yyyy-mm-dd hh:mm:ss,000”会更好。
正如user662894所回答的那样。
我想补充:不要试图从SQL Server的datetime2数据types中获取微秒:Excel不能处理超过3小数秒(即毫秒)。
因此,“yyyy-mm-dd hh:mm:ss.000000”将不起作用,并且当Excel将这种string(来自CSV文件)提供给它时,它将执行四舍五入而不是截断 。
这可能是罚款,除非微秒的精度很重要,在这种情况下,你最好通过不触发自动数据types识别,但只是保持stringstring…
我猜测ISO格式是个好主意。 ( 维基百科文章 ,也与时间信息)
试试MM / dd / yyyy hh:mm:ss格式。
Java代码来创buildXML文件。
附加(this.formatDate(resultSet.getTimestamp(“date”),“MM / dd / yyyy hh:mm:ss a”))。append(“”);
public String formatDate(Date date, String format) { String dateString = ""; if(null != date) { SimpleDateFormat dateFormat = new SimpleDateFormat(format); dateString = dateFormat.format(date); } return dateString; }