为什么 Excel 对某些日期的处理方式与其他日期不同?

And*_*ehm 2 date-time microsoft-excel microsoft-excel-2010

我有一个 CSV 文件,其中包含旨在解释为带有分钟、秒和毫秒的日期的字符串。

特别是条目如下所示:

"07/31/2013 23:59:32.864",otherdata,moredata
"08/01/2013 00:00:02.863",otherdata,moredata
Run Code Online (Sandbox Code Playgroud)

2013 年 7 月 31 日,Excel 决定使用“常规”格式并将值显示为

07/31/2013 23:59:32.864
Run Code Online (Sandbox Code Playgroud)

这正如预期的那样。

但是,对于 08/01/2013,Excel 采用“mm:ss.0”的“自定义”格式并将值显示为

00:02.9
Run Code Online (Sandbox Code Playgroud)

这没有帮助。如果我将单元格格式更改为“常规”,则该值变为 41282.00003。

奇怪的是,如果我将 8 月更改为 7 月(如 07/01/2013),则显示的值是现在

07/01/2013  00:00:03
Run Code Online (Sandbox Code Playgroud)

使用“dd/mm/yyyy hh:mm”的“自定义”格式。

如何阻止 Excel 基于在我看来随机的原因选择各种格式并同意使用一种格式来显示这些日期?

请注意,这与 Excel 混淆数月的日子没什么关系。日期 08/13/2013(其中 8 显然是月份)丢失了毫秒并显示为

08/13/2013  23:01:06
Run Code Online (Sandbox Code Playgroud)

使用“mm:ss.0”的“自定义”格式。

这完全很奇怪。

tey*_*lyn 6

您需要理顺您的区域设置和日期格式,并将它们与 CSV 中日期的月日顺序对齐。他们目前似乎没有凝胶。

41282.00003 是 2013 年 1 月 8 日,而不是 2013 年 8 月 1 日。

Excel 将尝试根据您计算机的区域设置来解释日期。如果区域设置为 DMY 且要解释的日期为 07/31/2013,则 DMY 订单将不起作用,Excel 会将数据解释为文本。这就是你所看到的。看起来像日期/时间值的文本。尝试以不同的方式格式化明显的日期/时间值。你会发现你不能,因为它是文本。

但是如果下一行数据是 08/01/2013,这非常适合区域设置的 DMY 方案,它将作为 8-Jan-2013 返回。您可以将单元格的格式更改为自定义格式

dd/mm/yyyy hh:mm:ss.000
Run Code Online (Sandbox Code Playgroud)

它会显示为 08/01/2013 00:00:02.863

在此处输入图片说明

单元格 A1 中的值是文本值,而不是实际日期时间。单元格格式为“常规”,任何数字格式都不会改变其外观。

单元格 A2 中的值是实际日期/时间值,使用上述自定义格式进行格式化。

导入日期时,请特别注意检查导入数据中日和月的顺序。使用导入向导时,您可以指定源数据的顺序以及所有日期的导入顺序。

让我们仔细看看第二个(真实的)日期。08/01/2013 00:00:02.863格式化为“常规”显示为41282.00003,格式化为正确的日期显示为 8-Jan-2013。美好的。

如果将 General 格式的小数点增加,您会发现实际的底层数字是41282.0000331366. 该号码有 15 位数字。

格式化为日期,您可以对其进行编辑并将日期从 8 更改为 7。结果将在“常规”格式中显示为41281.00003,但是如果您增加显示位数,您将看到数字为41281.00003472220

嗯?

怎么来的?我们只减去了一天,所以只有小数点的数字应该改变。

好吧,Excel 的任何数字都只有 15 位的内置精度。具有更多位数的数字将被四舍五入或最后一位数字将被替换为零。此外,Excel 中有一个众所周知的错误,它会影响达到 15 位限制的数字的准确性。

我认为这是臭虫抬起丑陋脑袋的一个例子。

当我们的日期/时间值的日期部分发生更改时,也会导致重新评估小数点,这将导致小数点后 4 位后出现一些四舍五入和不一致的行为。因此,实际的秒和毫秒数据将关闭。

看看这个截图是否有助于澄清:

在此处输入图片说明

B 到 D 列中的值均参考 A 列。A1 和 A2 之间的唯一区别是手动更改日期从 08/01 到 07/01(其中 01 是一月,根据 DMY 的区域设置)。

“常规”格式以 x.0003 十进制值显示这两个值。扩展小数显示,第四位小数后面的小数有很大的不同。

由于所需的最终结果是显示秒和毫秒的值,因此第 4 位小数后的小数确实有所不同,并且当该值使用显示秒和毫秒的自定义格式进行格式化时,该差异会显示(在 A 列中)。

另外,请注意数字仅由 15、16 和 17 位数字组成的三个单元格,以及 Excel 如何简单地用零替换第 15 位之后的任何数字,因为它无法显示更高的准确度。