Несоответствие между расчетами даты и времени в C # и Delphi - PullRequest
11 голосов
/ 16 декабря 2011

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 # соответствовать 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

Ответы [ 3 ]

7 голосов
/ 16 декабря 2011

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

0 голосов
/ 16 декабря 2011

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

0 голосов
/ 16 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...