Нужна помощь в преобразовании Delphi Time в .Net Time - PullRequest
3 голосов
/ 02 мая 2009

Я портирую приложение Delphi на C # и столкнулся с проблемой. Приложение Delphi записывает время в файл журнала, который затем считывается обратно в программу. Но формат записи времени меня смущает. Я не могу найти библиотеку .Net для ее правильного преобразования.

Delphi записал время в файле журнала: 976129709 (это преобразовывается в 14.01.2009 17:53:26 в коде Delphi)

//Here is the Delphi code which records it: 
IntToStr(DirInfo.Time);

//Here is the Delphi code which reads it back in:
DateTimeToStr(FileDateToDateTime(StrToInt(stringTime));

У кого-нибудь есть идеи, как я могу прочитать это в .Net?

Ответы [ 3 ]

13 голосов
/ 02 мая 2009

Delphi TSearchRec.Time формат - это старое 32-битное значение даты / времени в DOS. Насколько я знаю, для него нет встроенного конвертера, поэтому вам придется написать его. Например:

public static DateTime DosDateToDateTime(int DosDate)
{
     Int16 Hi = (Int16)((DosDate & 0xFFFF0000) >> 16);
     Int16 Lo = (Int16)(DosDate & 0x0000FFFF);

     return new DateTime(((Hi & 0x3F00) >> 9) + 1980, (Hi & 0xE0) >> 5, Hi & 0x1F,
        (Lo & 0xF800) >> 11, (Lo & 0x7E0) >> 5, (Lo & 0x1F) * 2);
}
3 голосов
/ 03 мая 2009

Здесь приведено описание различных форматов даты / времени (родной для Delphi TDateTime - формат даты OLE Automation). В соответствии с этим вам необходимо System.DateTime.FromFileTime () и System.DateTime.ToFileTime () + DosDateTimeToFileTime () и FileTimeToDosDateTime () функций. На самом деле, это преобразование в два этапа.

0 голосов
/ 02 мая 2009

Я пробовал и гуглить, и экспериментировать, начиная с фиктивного кода, чтобы найти что-то похожее на эпоху Unix.

  var x = 976129709;
  var target = new DateTime(2009, 1, 14, 17, 53, 26);
  var testTicks = target.AddTicks(-x);     // 2009-01-14 17:51:48
  var testMs = target.AddMilliseconds(-x); // 2009-01-03 10:44:36
  var testS = target.AddSeconds(-x);       // 1978-02-08 22:44:57
  // No need to check for bigger time units
  // since your input indicates second precision.

Не могли бы вы проверить, правильно ли введены данные?

И ради любви к Летающему Спагетти-Монстру, оставьте свой 12-часовой формат времени! ;)

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