NoPyGod
NoPyGod

Reputation: 5067

Disparity between date/time calculations in C# versus Delphi

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

It's not consistent either. Some dates will add up the same, ie..

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

The total amount of seconds is actually being used to encode data, and I'm trying to port the application to C#, so even one second completely throws everything off.

Can anybody explain the disparity? And is there a way to get c# to match delphi?

Edit: In response to suggestions that it might be leap second related: Both date ranges contain the same amount of leap seconds (2), so you would expect a mismatch for both. But instead we're seeing inconsistency

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

Upvotes: 11

Views: 1160

Answers (3)

RRUZ
RRUZ

Reputation: 136391

The issue it seems related to this QC 59310, the bug was fixed in Delphi XE.

Upvotes: 7

Mark Ransom
Mark Ransom

Reputation: 308158

You don't mention how you convert the c# TimeSpan into a number. The TotalSeconds property is a floating point value - perhaps it's a rounding problem in the double to int conversion?

Upvotes: 0

Veritas
Veritas

Reputation: 1

One will likely deal with Leap Seconds. However, .NET does not as far as I'm aware.

Upvotes: 0

Related Questions