我在写 CSV 文件。我需要编写至少精确到秒的时间戳,最好是精确到毫秒的时间戳。CSV 文件中的时间戳的最佳格式是什么,以便 Excel 能够在最少用户干预的情况下准确、毫不含糊地解析它们?
我相信如果您使用 double数据类型,那么在 Excel 中重新计算就可以了。
double
我想 ISO 格式是一个好主意。(维基百科文章,也有时间信息)
对于第二个精度,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 只使用自“划时代”日期起的天数,包括小数天数)。
[1]即数字信息。如果你想看到尽可能多的信息,但又不想用它来计算,你可以创建一些格式,Excel 肯定会将其解析为字符串,这样就不用管它了; 例如“ 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 (“ mydate >”) . append (this. format Date (result tSet.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; }
“ 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 的专栏,它将工作。(注意: 你可以告诉它进来作为一个有效的日期/时间,因为它将正确地证明... 如果它进来作为一个字符串,它将左证明)
下面是我测试过的格式:
当在 Excel 中打开时,“ yyyy-MM-dd”当然会显示为一个日期(也可以使用“ MM/dd/yyyy”)
“ yyyy-MM-dd HH: MM: ss”默认显示格式为“ MM/dd/yyyy HH: MM”(日期和时间 w/out 秒)
“ yyyy-MM-dd HH: mm: ss.fff”默认显示格式为“ HH: mm: ss”(时间只有 w/秒)
给定一个带有格式为: yyyy-mm-dd hh: mm: ss 的 datetime 列的 csv 文件
Excel 以如下格式显示它: dd/mm/yyyy hh: mm
例如2020-05-2216:40:55显示为22/05/202016:40
这显然是由 Windows 中选择的 Short date 和 Short time 格式决定的; 例如,如果我将 Windows 中的 Short date format 更改为 yyyy-mm-dd,Excel 显示2020-05-2216:40。
烦人的是,我找不到任何方法让 Excel 自动显示秒数(我必须在 Excel 中手动设置列的格式)。但是如果 csv 文件包含 hh: mm: ss 格式的时间列(例如16:40:55) ,那么 Excel 中就会显示这个时间列,包括秒。
我将我的时间戳写入 CSV 文件,作为 yyyy-mm-dd hh: mm: ss。
在 Excel365中,我创建了一个空白工作簿,进入 Data 选项卡并选择“ From Text/CSV。
一个预览对话框打开,奇怪的是,它没有显示时间戳的第一列,而是显示它将转换第二列。
您可以“加载”数据,或者“转换数据”,这是我的选择。
现在您在“ Power Query Editor”中,可以按摩 Excel 将如何引入列。
在我的情况下,我撤销它所做的任何自动更改,并告诉它两个列都是数据类型“日期/时间”,使用带子上的一个小按钮。
按下关闭和加载将它作为一个数据源带入 Excel,您可以进行排序等。