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

Ошибка в Конвертации Unix-времени: Миллисекунды vs Секунды

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

При работе с Unix-временем важно помнить, что оно измеряется в секундах, начиная с полуночи 1 января 1970 года. Однако, иногда timestamp может быть представлен в миллисекундах, что и приводит к ошибке в конвертации. В данной статье мы рассмотрим, как может произойти такая ошибка и как её исправить, используя язык программирования Object Pascal, который широко используется в среде разработки Delphi.

Описание проблемы

Пользователь столкнулся с проблемой, при которой функция UnixToDateTime возвращает дату, значительно превышающую реальные временные рамки. Примером такого timestamp является 1444288186967. Если ввести данное значение на онлайн-конвертер эпохи, то результат будет корректным — 08 Oct 2015 07:09:46. Однако, при использовании функции UnixToDateTime из другого источника (например, обсуждения на Stack Overflow) результат оказался датой 02 Sep 47737 11:02:47, что явно не соответствует действительности.

Пример кода

В коде, использующем компоненты TMS Aurelius, приведен следующий фрагмент:

Person.EndDate.Value := UnixToDateTime(FHit.TimestampUntil);

Где FHit.TimestampUntil представляет собой Int64, что соответствует ожиданиям функции UnixToDateTime. Person.EndDate.Value — это nullable TDateTime из библиотеки TMS Aurelius.

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

Обычно Unix-время измеряется в секундах с начала эпохи (1.1.1970). Однако, значение 1444288186967 представлено в миллисекундах. Для корректной конвертации необходимо разделить это значение на 1000 и округлить результат. Пример кода, который демонстрирует исправление:

var
  i64: Int64;
begin
  i64 := Round(1444288186967 / 1000);
  dt := UnixToDateTime(i64);
  Edit2.Text := DateTimeToStr(dt);
end;

После выполнения данного кода в компоненте Edit2 будет отображаться ожидаемая дата и время: 8.10.2015 7:09:47.

Комментарии

Документация функции UnixToDateTime() указывает, что Unix-время кодируется как количество секунд, начиная с полуночи 1 января 1970 года. Онлайн-конвертер эпохи упоминает, что таймстемп 1444288186967 предполагается в миллисекундах.

Заключение

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

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

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


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

Получайте свежие новости и обновления по 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:43:39/0.0035610198974609/0