Hei*_*nzi 5 .net c# datetime .net-core
.NET 7 文档DateTime.AddDays(double)说
value 参数四舍五入到最接近的毫秒。
然而,这在 .NET 7 中显然不再成立。考虑以下最小示例(fiddle .NET 4.7.2、fiddle .NET 7):
var d = 42005.416666666664; // Excel date
var date = new DateTime(1900, 1, 1, 0, 0, 0, 0).AddDays(d - 2.0);
Console.WriteLine(date.ToString("o"));
// .NET 4.8: Prints 2015-01-01T10:00:00.0000000
// .NET 7: Prints 2015-01-01T09:59:59.9999997
Run Code Online (Sandbox Code Playgroud)
这是故意的更改(即文档有问题/过时),还是我发现了 .NET 7 中的错误?
笔记:
FromOADate,它可以正确舍入。这只是一个最小的例子,用于证明观察到的行为与记录的行为之间的差异AddDays。小智 1
在 .NET 7 中,DateTime.AddDays 方法的行为已更改,它不再舍入到最接近的毫秒。进行此更改是为了使 DateTime 的行为与基础数据类型的行为保持一致,基础数据类型是自 0001 年 1 月 1 日以来 100 纳秒间隔数的 64 位二进制表示形式。
在.NET的早期版本中,DateTime被实现为具有高精度内部表示的结构,并且其值在显示或转换为字符串时四舍五入到最接近的毫秒。但是,这种舍入可能会在某些情况下导致不准确,例如在添加或减去日期时。
随着 .NET 7 中的更改,DateTime 的行为变得更加可预测和一致,并且它提供了更准确的日期和时间表示。如果需要显示具有特定精度的日期时间值,可以使用 ToString 方法并根据需要格式化输出。
请务必注意,此更改仅影响 DateTime.AddDays 的行为,而不影响 DateTime 结构的其他方法。其他方法(例如 DateTime.AddHours 或 DateTime.AddMilliseconds)的行为保持不变。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |