Подтвердить что ты не робот

Несоответствие между расчетами даты и времени в С# и Delphi

Delphi:

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

130289133

С#:

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

Общее количество секунд фактически используется для кодирования данных, и я пытаюсь перенести приложение на С#, поэтому даже одна секунда полностью отбрасывает все.

Может кто-нибудь объяснить несоответствие? И есть ли способ получить С# для соответствия 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
4b9b3361

Ответ 1

Проблема, похоже, связана с этим QC 59310, ошибка была исправлена ​​в Delphi XE.

Ответ 2

Скорее всего, речь идет о Leap Seconds. Однако .NET не настолько, насколько мне известно.

Ответ 3

Вы не упоминаете, как вы конвертируете С# TimeSpan в число. Свойство TotalSeconds является значением с плавающей запятой - возможно, это проблема округления в преобразовании double-int?