Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 UnixTime to DateTime, отстаёт на 3 часа  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
Здравствуйте.
получаю циферки, unixtime, перевожу в datetime, но оказывается что время отстаёт от реального времени на 3 часа.
я полагаю связано с часовым поясом?

конвертирую с помощью двух:
var tm : int64;
{...}
 function UnixTimeToDateTime(AUnixTime: DWord; ABias: Integer): TDateTime;
begin
 Result := UnixDateDelta + (AUnixTime div SecPerDay) { Days }
 + ((AUnixTime mod SecPerDay) / SecPerDay) { Seconds }
 - ABias * MinDayFraction { Bias to UTC in minutes };
end;
 function UnixTimeToStr(AUnixTime: DWord; ABias: Integer): string;
begin
 Result := FormatDateTime('ddddd hh:nn:ss', UnixTimeToDateTime(AUnixTime, ABias));
end;

{Юзаю так} := DateTimeToStr(UnixToDateTime(tm)); 

Как можно получить правильное время из unixtime ?
10 окт 18, 16:44    [21700746]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

10.10.2018 16:44, Tech N9ne пишет:
> Как можно получить правильное время из unixtime ?

а где ты его берёшь?

Posted via ActualForum NNTP Server 1.5

10 окт 18, 16:46    [21700750]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
cptngrb
Member

Откуда:
Сообщений: 236
да, от часового пояса.
используй стандартную функцию UnixToDateTime(date, false);
второй параметр отвечает за пояс
10 окт 18, 17:06    [21700781]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
cptngrb
Member

Откуда:
Сообщений: 236
модуль DateUtils
10 окт 18, 17:06    [21700783]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
cptngrb
да, от часового пояса.
используй стандартную функцию UnixToDateTime(date, false);
второй параметр отвечает за пояс
10 окт 18, 17:16    [21700796]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
Мимопроходящий
10.10.2018 16:44, Tech N9ne пишет:
> Как можно получить правильное время из unixtime ?

а где ты его берёшь?

vk api
cptngrb
да, от часового пояса.
используй стандартную функцию UnixToDateTime(date, false);
второй параметр отвечает за пояс

спасибо)
10 окт 18, 17:17    [21700800]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46376

Tech N9ne
vk api

Вот у них и спрашивай в каком часовом поясе они возвращают время. Вероятнее всего это UTC,
но с тем же успехом они могут и московское время возвращать.

Posted via ActualForum NNTP Server 1.5

10 окт 18, 17:24    [21700805]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
cptngrb
да, от часового пояса.
используй стандартную функцию UnixToDateTime(date, false);
второй параметр отвечает за пояс

Делаю так:
var Data: TDateTime ;
begin
Data := UnixToDateTime(1539179389, false);
end;

не компилит, ошибка:
Too many actual parameters

если убрать запятую и false то всё работает, но отстаёт на 3 часа))
10 окт 18, 17:25    [21700806]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3936
Dimitry Sibiryakov
Tech N9ne
vk api

Вот у них и спрашивай в каком часовом поясе они возвращают время. Вероятнее всего это UTC,
но с тем же успехом они могут и московское время возвращать.

Не может. Юникс тайм всегда в UTC. Если нет, то это уже криворукость разработчиков, кто такие испорченные данные передает.
10 окт 18, 17:29    [21700813]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

10.10.2018 17:25, Tech N9ne пишет:
> отстаёт на 3 часа

тебе же уже сказали, скорее всего это UTC

Posted via ActualForum NNTP Server 1.5

10 окт 18, 17:32    [21700818]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

10.10.2018 17:29, JaDi пишет:
> Не может. Юникс тайм всегда в UTC

не верь педовикии.

Posted via ActualForum NNTP Server 1.5

10 окт 18, 17:33    [21700820]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Tech N9ne
Member

Откуда:
Сообщений: 113
Мимопроходящий
10.10.2018 17:29, JaDi пишет:
> Не может. Юникс тайм всегда в UTC

не верь педовикии.

дык это понятно..
как мне получить правильное время из unixtime ?
Не менять же часовой пояс на пк.
10 окт 18, 17:35    [21700823]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1203
TTimeZone.Local.ToUniversalTime(Now()); // из локального в UTC
TTimeZone.Local.ToLocalTime(Now()); // из UTC в локальное
10 окт 18, 17:38    [21700829]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29296

10.10.2018 17:35, Tech N9ne пишет:
> дык это понятно..
> как мне получить правильное время из unixtime ?

+ 3 * 60 * 60

Posted via ActualForum NNTP Server 1.5

10 окт 18, 17:39    [21700830]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1203
Tech N9ne
cptngrb
да, от часового пояса.
используй стандартную функцию UnixToDateTime(date, false);
второй параметр отвечает за пояс

Делаю так:
var Data: TDateTime ;
begin
Data := UnixToDateTime(1539179389, false);
end;

не компилит, ошибка:
Too many actual parameters

если убрать запятую и false то всё работает, но отстаёт на 3 часа))

Потому что вы наверное переопределили функцию... надо через namespace указать
System.DateUtils.UnixToDateTime(1539179389, false)
10 окт 18, 17:41    [21700832]     Ответить | Цитировать Сообщить модератору
 Re: UnixTime to DateTime, отстаёт на 3 часа  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1172
Tech N9ne
Мимопроходящий
10.10.2018 17:29, JaDi пишет:
> Не может. Юникс тайм всегда в UTC

не верь педовикии.

дык это понятно..
как мне получить правильное время из unixtime ?
Не менять же часовой пояс на пк.

Его надо не менять, а получить из текущих настроек.

гугли GetTimeZoneInformation
10 окт 18, 18:32    [21700895]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить