CSV/Excel的最佳时间戳格式?
我正在写一个CSV文件。我需要写的时间戳至少精确到秒,最好精确到毫秒。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的时
双数据类型,在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;
}