Delphi: строка UnixTime для DateTime дает неожиданный результат - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь преобразовать строку unixtime в datetime, но это неверный результат. Я использую Delphi XE2 и использую функцию UnixToDateTime Dateutils для преобразования строки unixtime, но не повезло. Я также использовал другую функцию, которую я нашел в сети, и тот же результат. Ниже приведены необходимые данные:

Строковое значение Unixtime: 1552274340690
Результатом будет «51159-08-14 04:51:30», которое должно быть «11.03.2009, 11:19:00 AM». Я получил результат от онлайн-конвертера.

Ниже пример кода с использованием UnixToDateTime System.DateUtils:

var
 nUnixTime : Int64;
begin
 nUnixTime := StrtoInt64(sUnixTime); //sUnixTime = 1552274340690;
 Result = UnixToDateTime(nUnixTime);

Ниже пример кода, который я нашел в сети:

const
 UnixStartDate: TDateTime = 25569.0;
var
 nUnixTime : Int64;
begin
 nUnixTime := StrtoInt64(sUnixTime); //sUnixTime = 1552274340690;
 Result := (nUnixTime / 86400) + UnixStartDate; 

Пожалуйста, помогите, большое спасибо.

1 Ответ

2 голосов
/ 11 марта 2019

Маленький тест

Caption:=DateTimeToStr(UnixToDateTime(SecondsBetween(StrToDate('01.01.1970'), Now)));` 

дает правильное текущее время.

Обратите внимание, что пока UnixTime измеряется в секундах

1552307060
1552274340690

пока ваше значение (во второй строке) находится в миллисекундах .

Таким образом, вы можете разделить его на 1000, чтобы получить значение, приемлемое для UnixToDateTime function

...