【问题标题】:Disparity between date/time calculations in C# versus DelphiC# 与 Delphi 中的日期/时间计算之间的差异
【发布时间】:2011-12-16 03:37:08
【问题描述】:

德尔福:

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#匹配delphi?

编辑:针对可能与闰秒相关的建议:两个日期范围都包含相同数量的闰秒 (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

【问题讨论】:

  • 有趣的问题,但你应该问一个问题。
  • 也许两个系统对leap seconds的处理不同?
  • @Austin Salonen 我为你添加了问题部分:P
  • 你有SecondsBetween文档的链接吗?
  • @NoPyGod 我发现了这个QC 59310 该错误已在 Delphi XE 中修复。

标签: c# delphi datetime


【解决方案1】:

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

【讨论】:

  • 鉴于此,我将如何在 C# 中模拟此错误?我正在尝试移植一个应用程序,如果我再过一秒钟,它就会使应用程序的整个解码部分陷入混乱。感谢您找到此信息,非常有帮助。
  • @NoPyGod 你不能在 C# 中消除它,因为它在 Delphi 方面;你可以在那里重新引入它,但它可能太过分了。尝试使用“days between”(假设有这种方法),然后手动计算两个无日期时间之间的差异。
【解决方案2】:

可能会处理Leap Seconds。但是,据我所知,.NET 并没有。

【讨论】:

  • 两个日期范围包含相同数量的闰秒,但其中一个计算正确。
  • @NoPyGod,如果一个考虑闰秒而另一个不考虑,则会导致差异。
  • 我比较了两种不同日期范围内两种语言的结果。在一种情况下,结果匹配。两个日期范围都包含相同的闰秒数。
【解决方案3】:

您没有提到如何将 c# TimeSpan 转换为数字。 TotalSeconds 属性是一个浮点值 - 可能是 double 到 int 转换中的舍入问题?

【讨论】:

  • 仅使用常规类型转换 (int)
  • 双精度值仍然不正确。但你说得对,我不应该省略那个细节。
猜你喜欢
  • 2016-08-14
  • 2016-04-26
  • 2010-11-07
  • 2016-06-22
  • 2021-11-25
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多