You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:40:46