CSV/Excel的最佳时间戳格式?

CSV/Excel的最佳时间戳格式?,excel,formatting,csv,timestamp,Excel,Formatting,Csv,Timestamp,我正在写一个CSV文件。我需要写的时间戳至少精确到秒,最好精确到毫秒。CSV文件中时间戳的最佳格式是什么,这样Excel就可以在最少的用户干预下准确无误地解析这些时间戳?我相信如果使用双数据类型,在Excel中重新计算会很好。我想这是个好主意。(,也带有时间信息)对于秒精度,yyyy-MM-dd HH:MM:ss应该做到这一点 我认为Excel在一秒钟内的表现不是很好(在与COM对象IIRC交互时会丢失它们)。之前建议使用“yyy-MM-dd HH:MM:ss”是可以的,尽管我认为Excel的时

我正在写一个CSV文件。我需要写的时间戳至少精确到秒,最好精确到毫秒。CSV文件中时间戳的最佳格式是什么,这样Excel就可以在最少的用户干预下准确无误地解析这些时间戳?

我相信如果使用
双数据类型,在Excel中重新计算会很好。

我想这是个好主意。(,也带有时间信息)

对于秒精度,yyyy-MM-dd HH:MM:ss应该做到这一点


我认为Excel在一秒钟内的表现不是很好(在与COM对象IIRC交互时会丢失它们)。

之前建议使用“yyy-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只使用天数,包括小数天,从“纪元”日期开始)



[1] 也就是说,数字信息。如果您希望看到尽可能多的信息,但不关心如何使用这些信息进行计算,那么您可以编写一些格式,Excel肯定会将其解析为字符串,这样就不用管它了;e、 g.“yyyymmdd.hhmmss.000”。

“yyyy-MM-dd-hh:MM:ss.000”格式不适用于所有地区。对于一些人(至少是丹麦人),“yyyy-MM-dd hh:MM:ss,000”将更有效。

至于时区。我必须将UTC偏移量存储为UTC的秒数,这样Excel/OpenOffice中的公式最终可以本地化日期时间。我发现这比存储任何前面有0的数字都要容易-0900在任何电子表格系统中都不能很好地解析,导入几乎不可能训练人们这样做。

转到“控制面板”中的“语言设置”,然后选择“格式选项”,选择一个区域设置,并查看Windows默认使用的所选区域设置的实际日期格式。是的,时间戳格式是区域设置敏感的。Excel在解析CSV时使用这些格式


此外,如果区域设置使用ASCII以外的字符,则必须在相应的前Unicode Windows“ANSI”代码页中发出CSV,例如CP1251。Excel不接受UTF-8。

请尝试MM/dd/yyyy hh:MM:ss a格式

创建XML文件的Java代码

append(this.formatDate(resultSet.getTimestamp(“日期”), “MM/dd/yyyy hh:MM:ss a”)。附加(“”)

“yyyy-mm-dd hh:mm:ss.000”格式不适用于所有地区。对于 有些(至少是丹麦语)“yyyy-mm-dd hh:mm:ss,000”会更好

如用户662894所回复

我想补充一点:不要试图从SQL Server的datetime2数据类型获取微秒:Excel不能处理超过3秒的小数(即毫秒)

因此,“yyyy-mm-dd hh:mm:ss.000000”将不起作用,当Excel输入这种字符串(来自CSV文件)时,它将执行舍入而不是截断


这可能没问题,除非微秒精度很重要,在这种情况下,最好不要触发自动数据类型识别,而只是将字符串保留为字符串…

因此,奇怪的excel以不同的方式导入csv日期。并且,根据csv文件中使用的格式,它们的显示方式会有所不同。不幸的是,ISO 8061格式以字符串形式出现。这会阻止你自己重新格式化日期

所有的人都是作为约会来的。。。包含全部信息。。。但它们的格式不同。。。如果您不喜欢,可以在excel中为列选择一种新的格式,它将起作用。(注意:您可以判断它是作为有效日期/时间输入的,因为它将右对齐…如果它作为字符串输入,则将左对齐)

以下是我测试过的格式:

“yyyy-MM-dd”在excel中打开时显示为课程日期。(也是“MM/dd/yyyy”工程)

“yyyy-MM-dd-HH:MM:ss”默认显示格式为“MM/dd/yyyy-HH:MM”(日期和时间不含秒)


“yyyy-MM-dd HH:MM:ss.fff”默认显示格式为“HH:MM:ss”(仅限时间/秒)

给定一个csv文件,该文件具有以下格式的datetime列:yyyy-MM-dd HH:MM:ss

Excel以以下格式显示:dd/mm/yyyy hh:mm

e、 g.2020-05-22 16:40:55显示为2020年5月22日16:40

这显然是由Windows中选择的短日期和短时间格式决定的;例如,如果我将Windows中的短日期格式更改为yyyy mm dd,Excel将显示2020-05-22 16:40


令人烦恼的是,我找不到任何方法使Excel自动显示秒数(我必须手动在Excel中设置列的格式)。但如果csv文件包含hh:mm:ss格式的时间列(例如16:40:55),则Excel中会显示该时间列,包括秒数

您使用什么语言创建输出?我刚刚尝试过,效果非常好。只需告诉Excell,特定列的格式是日期/时间。不会的
public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}