TimeToStr(time) - время по Гринвичу?[РЕШЕНО]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

TimeToStr(time) - время по Гринвичу?[РЕШЕНО]

Сообщение Владимир »

Всем доброго!
Lazarus 2.0.10 - время московское
Lazarus 2.0.12 r63942 - время по гринвичу
Lazarus 2.2.0 - время по гринвичу

ОС Linux, в системе время московское
Как вариант

Код: Выделить всё

 TimeToStr(time+3/24)

Куда копать, дабы московское время получить?
Последний раз редактировалось Владимир 12.04.2022 07:56:24, всего редактировалось 2 раза.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Владимир
Не только в преобразованиях в строку проблемы, на самом деле
http://sirserge.altai.info/articles/?id=46
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

Т.е. простого решения на данный момент нет.
SSerge писал(а):Не только в преобразованиях в строку проблемы

Я понимаю, что проблема с TDateTime. TimeToStr() вынес в заголовок для привлечения внимания :D
И спасибо!
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

На самом деле проблем вроде бы нет.
В первую очередь нужно поискать проблему в системе, так как time возвращает локальное время (см. реализацию).
То что возвращается UTC - это не правильно.

Для начала гляньте выхлоп timedatectl в консоли.
И можно посмотреть что вернет функция GetLocalTimeOffset.

А что выведет вот такой код?

Код: Выделить всё

uses sysutils,dateutils;
var
  Time:TDateTime;
  SystemTime: TSystemTime;
begin
  Time := Now;
  writeln('Local:',formatdatetime('dd-mm-yyyy hh:nn:ss',Time));
  writeln('UTC  :',formatdatetime('dd-mm-yyyy hh:nn:ss',LocalTimeToUniversal(Time)));
  GetLocalTime(SystemTime);
  writeln(SystemTime.Hour,':',SystemTime.Minute);
end.

Код: Выделить всё

output:
Local:04-04-2022 09:52:38:729
UTC  :04-04-2022 04:52:38:729

lazarus 2.2.0 fpc 3.2.0 linux 64
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Была проблема.
Правили чтение данных таймзоны

сейчас нормально
Lazarus 2.3.0 (rev main-2_3-1047-g4d0b49c62b) FPC 3.3.1 x86_64-linux-gtk2
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

alexs писал(а):Была проблема.
Правили чтение данных таймзоны

А где именно проблема была? В какой версии?
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Проблема была в FPC
Владимир
постоялец
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Сообщение Владимир »

WAYFARER писал(а):А что выведет вот такой код?

Я ж написал - в системе время московское, тем не менее:

Код: Выделить всё

Local:12-04-2022 04:48:02
UTC  :12-04-2022 04:48:02
System:12-04-2022 07:48:02
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Если не ошибаюсь - правили файл https://gitlab.com/freepascal.org/fpc/s ... mezone.inc
текущий FPC работает норм.
Вот пример от WAYFARER - всё красиво.

Код: Выделить всё

[alexs@alexs 9]$ fpc aa.pas 
Free Pascal Compiler version 3.3.1 [2022/04/05] for x86_64
Copyright (c) 1993-2022 by Florian Klaempfl and others
Target OS: Linux for x86-64


[alexs@alexs 9]$ ./aa
Local:12-04-2022 09:36:50
UTC  :12-04-2022 06:36:50
9:36
Ответить