CSV / Excel的最佳时间戳格式?
-
03-07-2019 - |
题
我正在写一个CSV文件。我需要编写至少精确到秒的时间戳,最好是毫秒。 CSV文件中时间戳的最佳格式是什么,以便Excel可以用最少的用户干预准确无误地解析它们?
解决方案
对于第二个准确度,yyyy-MM-dd HH:mm:ss应该可以解决问题。
我认为Excel在几分之一秒内不是很好(在与COM对象IIRC交互时丢失它们。)
其他提示
早先的建议是使用“yyyy-MM-dd HH:mm:ss”。很好,但我相信Excel的时间分辨率要比它好得多。我找到这篇文章相当可信(遵循线程,你会看到许多算术和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],您可能希望将时间戳分为日期部分和时间部分,时间部分仅分配给第二部分。在我看来,像Excel想要给你最多三个可见的“级别”。 (在任何给定的单元格中,其中一小部分是他们自己的级别),你想要七:年,月,日,小时,分钟,秒和分数秒。
或者,如果您不需要时间戳是人类可读的,但您希望它尽可能准确,您可能更喜欢存储一个大数字(在内部,Excel只使用天数,包括分数天,因为“epoch”日期。)
[1]即数字信息。如果你想查看尽可能多的信息但不关心用它进行计算,你可以编制一些Excel肯定会解析为字符串的格式,从而不用了;例如" yyyymmdd.hhmmss.000"
" yyyy-MM-dd hh:mm:ss.000"格式不适用于所有语言环境。对于一些人(至少丹麦人),“yyyy-MM-dd hh:mm:ss,000”,会更好。
我相信如果您使用 double
数据类型,Excel中的重新计算就可以了。
转到“控制面板”中的语言设置,然后转到“格式选项”,选择一个区域设置,并查看默认情况下Windows使用的所选区域设置的实际日期格式。是的,该时间戳格式是区域设置敏感的。 Excel在解析CSV时使用这些格式。
更进一步,如果语言环境使用超过ASCII的字符,则必须在相应的前Unicode Windows“ANSI”中发出CSV。代码页,例如CP1251。 Excel不接受UTF-8。
至于时区。我必须将UTC偏移量作为UTC的秒数存储,这样Excel / OpenOffice中的公式最终可以本地化日期时间。我发现这比存储前面有0的任何数字更容易。 -0900在任何电子表格系统中都没有很好地解析,导入它几乎不可能训练人们去做。
" yyyy-mm-dd hh:mm:ss.000"格式不适用于所有语言环境。对于 一些(至少丹麦语)“yyyy-mm-dd hh:mm:ss,000”"会更好。
由user662894回复。
我想补充一点:不要试图从SQL Server的datetime2数据类型中获取微秒:Excel无法处理超过3个小数秒(即毫秒)。
所以“yyyy-mm-dd hh:mm:ss.000000”不起作用,当Excel输入这种字符串(来自CSV文件)时,它将执行舍入而不是截断。
这可能没问题,除非微秒精度很重要,在这种情况下你最好不要触发自动数据类型识别但只是将字符串保持为字符串......
尝试MM / dd / yyyy hh:mm:ss格式。
用于创建XML文件的Java代码。
xmlResponse.append(QUOT;数值指明MyDate>&QUOT)追加(this.formatDate(了ResultSet.getTimestamp(QUOT;日期&QUOT), “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;
}
所以,奇怪的是excel以不同的方式导入csv日期。 和,根据csv文件中使用的格式以不同方式显示它们。不幸的是,ISO 8061格式是一个字符串。这可以防止您自己重新格式化日期。
所有作为日期进入的...包含整个信息......但它们的格式不同......如果您不喜欢它,您可以为excel中的列选择一种新格式将工作。 (注意:你可以告诉它作为一个有效的日期/时间进入,因为它会正确地证明...如果它作为一个字符串出现,它将是合理的)
以下是我测试的格式:
" YYYY-MM-DD"在excel中打开时显示为当然的日期。 (也是“MM / dd / yyyy”的作品)
" yyyy-MM-dd HH:mm:ss.fff"默认显示格式是“HH:mm:ss”。 (时间只有几秒钟)