Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перевод форматов времени: Delphi и C# в синхронизации логов

Delphi , Синтаксис , Дата и Время

При переносе приложения, написанного на Delphi, в среду C#, часто возникают проблемы с совместимостью форматов данных. Одной из таких проблем является несоответствие форматов времени. В Delphi используется свой собственный формат для представления времени, который может быть несовместим с форматами, используемыми в .NET. В данной статье мы рассмотрим, как решить эту проблему на примере преобразования времени из Delphi в формат времени .NET.

Проблема

В процессе переноса приложения на C# разработчик столкнулся с проблемой чтения временных меток, записанных в лог-файл приложением на Delphi. В Delphi для записи времени используется значение 976129709, которое в коде Delphi интерпретируется как 1/14/2009 5:53:26 PM. Однако в C# нет встроенной библиотеки для корректного преобразования этого формата.

Контекст

Delphi использует формат времени, основанный на 32-битном значении, которое включает дату и время в формате DOS. В .NET для работы с временными метками используется класс DateTime.

Подтвержденный ответ

Для решения задачи необходимо написать функцию преобразования из формата времени Delphi в формат DateTime в C#. Пример такой функции:

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);
}

Альтернативный ответ

Также можно использовать встроенные функции .NET для преобразования временных меток файлов, например System.DateTime.FromFileTime() и System.DateTime.ToFileTime() в сочетании с функциями DosDateTimeToFileTime() и FileTimeToDosDateTime().

Пример использования

public static DateTime DelphiTimeToDateTime(this double delphiTime)
{
    delphiTime *= 24; // часы с начала эпохи Delphi
    delphiTime *= 60; // минуты с начала эпохи
    delphiTime *= 60; // секунды с начала эпохи
    delphiTime *= 1000; // миллисекунды с начала эпохи
    delphiTime *= 1000; // микросекунды с начала эпохи (не используется, так как округлено до миллисекунд в Delphi)
    delphiTime *= 10; // 100 наносекунд с начала эпохи

    long time = 599264352000000000L; // 1/1/0001 -> 1899/12/30

    time += (long)delphiTime;

    return new DateTime(time, DateTimeKind.Local);
}

Заключение

При переносе приложений между различными средами разработки важно учитывать различия в форматах данных, особенно в форматах времени. Использование предоставленных функций преобразования позволит синхронизировать лог-файлы и обеспечить корректную работу приложения в новой среде.

Создано по материалам из источника по ссылке.

Проблема при переносе приложения с Delphi на C# связана с несовместимостью форматов времени, и требуется разработка функции для преобразования временных меток между этими средами.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 14:40:26/0.0055630207061768/1