.NET 7中DateTime.AddDays为何不再四舍五入到最近毫秒?
.NET 7中DateTime.AddDays(double)行为与文档描述不符的疑问
.NET 7的DateTime.AddDays(double)文档指出:
value参数会四舍五入到最近的毫秒。
但在.NET 7中这一描述似乎不再成立。以下是最简示例:
var d = 42005.416666666664; // Excel日期值 var date = new DateTime(1900, 1, 1, 0, 0, 0, 0).AddDays(d - 2.0); Console.WriteLine(date.ToString("o")); // .NET 4.8: 输出 2015-01-01T10:00:00.0000000 // .NET 7: 输出 2015-01-01T09:59:59.9999997
这是有意变更(即文档存在错误/过时),还是.NET 7的Bug?
备注:
- 我了解“浮点精度问题”,但此处并非该问题,因为DateTime内部使用精确的ticks;
- 关于四舍五入到最近毫秒的动机,可参考相关讨论;
- 我知道转换Excel日期的正确方式是使用
FromOADate,它能正确四舍五入,此处仅用最简示例展示AddDays的实际行为与文档描述的差异。
内容的提问来源于stack exchange,提问作者Heinzi
相关产品推荐
相关产品推荐

