C# 与 Delphi 中的日期/时间计算之间的差异

本文关键字:计算 之间 时间 日期 Delphi | 更新日期: 2023-09-27 18:17:57

Delphi:

SecondsBetween(StrToDateTime('16/02/2009 11:25:34 p.m.'), StrToDateTime('1/01/2005 12:00:00 a.m.'));
130289133

C#:

TimeSpan span = DateTime.Parse("16/02/2009 11:25:34 p.m.").Subtract(DateTime.Parse("1/01/2005 12:00:00 a.m."));
130289134

这也不一致。有些日期加起来是一样的,即..

TimeSpan span = DateTime.Parse("16/11/2011 11:25:43 p.m.").Subtract(DateTime.Parse("1/01/2005 12:00:00 a.m."));
SecondsBetween(StrToDateTime('16/11/2011 11:25:43 p.m.'), StrToDateTime('1/01/2005 12:00:00 a.m.'));
both give
216905143

总秒数实际上用于对数据进行编码,我正在尝试将应用程序移植到 C#,因此即使一秒钟也会完全抛弃所有内容。

谁能解释一下这种差异?有没有办法让 c# 与德尔福相匹配?

编辑:为了响应可能与闰秒相关的建议:两个日期范围包含相同数量的闰秒 (2(,因此您会期望两者不匹配。但相反,我们看到的是不一致。

16/02/2009 - 1/01/2005 = Delphi and C# calculate a different total seconds
16/11/2011 - 1/01/2005 = They calculate the same total seconds

C# 与 Delphi 中的日期/时间计算之间的差异

该问题似乎与此QC 59310有关,该错误已在Delphi XE中修复。

人们可能会处理闰秒。但是,据我所知,.NET 并没有。

你没有提到如何将 c# TimeSpan 转换为数字。TotalSeconds 属性是一个浮点值 - 也许这是双精度到 int 转换中的舍入问题?