我正在写一个CSV文件。我需要写的时间戳至少精确到秒,最好精确到毫秒。CSV文件中时间戳的最佳格式是什么,以便Excel能够以最少的用户干预对其进行准确而明确的解析?
我正在写一个CSV文件。我需要写的时间戳至少精确到秒,最好精确到毫秒。CSV文件中时间戳的最佳格式是什么,以便Excel能够以最少的用户干预对其进行准确而明确的解析?
Answers:
为了达到第二个精度,yyyy-MM-dd HH:mm:ss应该可以解决问题。
我认为Excel在几分之一秒内不是很好(与COM对象IIRC交互时会丢失)。
strftime
,等效的参数字符串为"%Y-%m-%d %H:%M:%S"
.CSV
只是一个文本文件。您可以将时区或您写入文件的其他任何内容显示为以逗号分隔的纯文本;重要的是哪个应用程序将读取它,以及该应用程序如何期待文本。 这是来自国会图书馆的CSV标准文档。没有规定的方式来专门存储日期。也是RFC-4180和CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)。
"%Y-%m-%d %H:%M:%S"
与Ruby相同。
早先的建议使用“ 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”,在“ / d / yyyy hh:mm:ss AM / PM”。
为了在没有人工干预的情况下在单元中传递最大信息[1],您可能希望将时间戳分为日期部分和时间部分,而时间部分仅分为第二部分。在我看来,Excel希望在任何给定的单元格中最多为您提供三个可见的“级别”(其中几分之一秒是他们自己的级别),而您希望有七个:年,月,日,小时,分钟,秒,几分之一秒
或者,如果您不需要时间戳可读性,但希望它尽可能准确,则您可能希望仅存储大量数字(内部,Excel仅使用天数,包括小数天) ,自“时代”日期开始)。
[1]即数字信息。如果您希望看到尽可能多的信息,但又不关心使用它来进行计算,则可以组成某种格式,Excel肯定会将其解析为一个字符串,因此不用理会;例如“ yyyymmdd.hhmmss.000”。
我相信,如果您使用double
数据类型,则在Excel中进行重新计算就可以了。
“ 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格式。
Java代码创建XML文件。
xmlResponse.append(“ mydate>”)。append(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;
}
因此,奇怪的是excel以不同的方式导入了csv日期。和,根据csv文件中使用的格式不同地显示它们。不幸的是,ISO 8061格式以字符串形式出现。这样可以防止您自己重新格式化日期。
所有这些都作为日期而来...包含全部信息...但是它们的格式不同...如果您不喜欢它,则可以在excel中为该列选择一种新格式,它将起作用。(注意:您可以说它以有效的日期/时间输入,因为它会正确对齐...如果以字符串形式输入,则将保持对齐)
这是我测试过的格式:
在excel中打开时,“ yyyy-MM-dd”显示为课程的日期。(同样适用于“ MM / dd / yyyy”)
“ yyyy-MM-dd HH:mm:ss”默认显示格式为“ MM / dd / yyyy HH:mm”(日期和时间,无秒)
“ yyyy-MM-dd HH:mm:ss.fff”默认显示格式为“ HH:mm:ss”(仅带秒数的时间)
给定一个带有以下格式的datetime列的csv文件:yyyy-mm-dd hh:mm:ss
Excel以以下格式显示它:dd / mm / yyyy hh:mm
例如2020-05-22 16:40:55显示为22/05/2020 16:40
显然,这取决于Windows中选择的“短日期”和“短时间”格式。例如,如果我将Windows中的“短日期”格式更改为yyyy-mm-dd,Excel将显示2020-05-22 16:40。
烦人的是,我找不到任何使Excel自动显示秒数的方法(我必须在Excel中手动设置列的格式)。但是,如果csv文件包含hh:mm:ss格式的时间列(例如16:40:55),则这就是Excel中显示的内容,包括秒。