TDateTime to QDateTime

    Итак необходимо преобразовать тип TDateTime, использующийся в Delphi, в тип QDateTime Qt.
    TDateTime представляет собой число с плавающей точкой, где целая часть — число дней с 30 декабря 1899 года до текущего дня, а дробная часть — число секунд от начала дня.

    QDateTime Converter::fromTDateTime( double tDateTime )
    {
    int time_t = (int)((tDateTime — 25569.16666) * 86400); //получили время в формате time_t
    return QDateTime::fromTime_t( time_t );
    }

    25569.16666 — это 1 января 1970 года в формате TDateTime.
    86400 — количество секунд в одном дне.

    В реальной программе оба магических числа заменяем константами.

    Обратное преобразование выполняется в обратном порядке.

    Комментарии 5

      0
      А зачем, простите? Вы играетесь с полумертвым Kylix?
        0
        Нет. Просто пришлось по разбирать track-файл OziExplorer, который как раз хранит запись о дате в этом формате.
          0
          Боже мой, неужели кто-то хранит дату в файлах не в общепринятом формате? :)
            0
            Да, вот именно так. Сам поразился, когда увидел. Долго думал, что это за веселое число, потом нашел описание формата файла и офигел. А потом нашел описание формата TDateTime и офигел ещё больше. Самое забавное, что в сети почти нет информации по конвертации этого зло-формата TDateTime во что-нибудь общепринятое.
        0
        а 0.16666 (4 часа) вычитаете чтобы компенсировать TimeZone?
        Наверное более правильно будет использовать второй параметр функции QDateTime::fromTime_t — Qt::TimeSpec
        Qt::LocalTime
        Qt::UTC
        Qt::OffsetFromUTC
        Qt::TimeZone

        ЗЫ. посмотрел на дату заметки. возможно в то время этого в qt небыло)

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое