powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Серверное время и часовые пояса
25 сообщений из 65, страница 2 из 3
Серверное время и часовые пояса
    #36681456
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azam,
. У вас именно таймзоны (timezone) или разницы времён (timezone offset)? А то ведь есть ещё зимнее-летнее время, и на стыке риск выполнить работу дважды за ночь или не выполнить вовсе.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36681613
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamЁш,

реальная ситуация.
UTC+02 - серверное время
UTC+03 - время пользователя
время выполнения задания 20-00 к примеру, а сейчас 18-00 к примеру по UTC+03.
На серваке во время установки задания 16-00, следовательно, задание со временем выполнения 20-00 по UTC+03 надо написать в 18-00 по UTC+02. Чтобы робот выполнил задание в 18-00 .
Как быть?
Время передается как параметр в функцию.Если на серваке время 16 UTC +2, а на станции 18 UTC+3, то где-то на час сбито время.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36681968
905
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Warstone905 немного не понимает идеологию работы с Postgres ...
да, после более внимательного прочтение главы "Date/Time Types" мне стало яснее
пожалуй ТС стоит сделать тоже самое )
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36682222
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По ходу мне кажется я нашел решение. При вставке перевожу дату в UTC. При выборке роботом джобов оставляю серверное время.
Вроде пока все так как надо.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36682669
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть вы принципиально не читаете что вам пишут. А зачем тогда эта тема?
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36682735
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,
О чем Вы?
Извините если я что-то упустил. Перечитаю еще раз.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36682746
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,
Вы о сбитом времени? А Помоему все нормально.
http://www.worldtimezone.com/index_ru.php
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36682815
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ru,

Вариант с оффсетом тоже привлекателен. То есть не указывая определенной даты, говорить через час, день, три часа или пять суток?
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36683621
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamWarstone,
Вы о сбитом времени? А Помоему все нормально.
http://www.worldtimezone.com/index_ru.phpЯ не о сбитом времени я о том, что если вы в Москве сейчас 16 часов, вы заносите 17 часов, а на сервере 5 часов, то для сервера это будет 6 часов. То есть вы тупо делаете INSERT now() + INTERVAL '1 hour' и он будет "+1 hour" и для сервера.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684090
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamВариант с оффсетом тоже привлекателен. То есть не указывая определенной даты, говорить через час, день, три часа или пять суток?

Вы не поняли.

Моя таймзона --- Новосибирск, NOVST, UTC+06:00 или UTC+07:00, в зависимости от зимнего/летнего времени. Пусть для простоты сервер живёт в UTC. Если я сейчас, летом, скажу, что задачу надо сделать первого января в 14:00 по местному, то надо, чтоб сервер понял, что tmiezone offset для NOVST будет в этот день +360 минут, а не +420 минут как сейчас, то есть если задача сегодня, то надо запомнить 07:00 UTC, а если в январе, то 08:00 UTC. А при создании, скажем, ежедневной задача в 02:30 по местному ваша аппликуха вообще должна отдельно уточнить у юзера поведение в переходные дни.

Ну а если сервер должен при этом уметь сам жить в любой таймзоне, а не в UTC, то будет вообще цирк. Тогда разность таймзон может достигать 28 часов, и с переходными датами получается полный цирк.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684117
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ru,

Да это понятно. Пока не знаю как сделать для дней, в которые меняется время.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684120
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели нет шедулера для постгрес? Может не писать ничего, а просто воспользоваться нормальным шедулером?
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684136
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamiv_an_ru,

Да это понятно. Пока не знаю как сделать для дней, в которые меняется время.Вы тролль? Сколько раз вам повторить что все сделано командой Postgres за вас?

Шедуллер есть pg_agent. Но не сильно рекомендуется им пользоваться. Обычно пользуются cron'ом и он всех устраивает. Проблема только в том, что он под никсами (для виндоузятников)
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684168
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,
нет не тролль :)
Вы читали пост выше?
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684170
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nodir_azam,
В общем предлагаю закрыть thread, так как он теряет смысл.
Скрипт работает, время покажет что будет в переходе на летнее/зимнее время.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684263
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamWarstone,
нет не тролль :)
Вы читали пост выше?Читал. И я не понимаю зачем приводить к +0 UTC, если тут прекрасно справляется механизм по умлочанию. Может и я не прав... Распишите еще раз задачу.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684339
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
WarstoneИ я не понимаю зачем приводить к +0 UTC, если тут прекрасно справляется механизм по умлочанию. Может и я не прав... Распишите еще раз задачу.

Интересно, какие тут могут быть резоны, я сам могу припомнить только один вариант, когда имеет смысл хранить время по Гринвичу - если требуется конвертация в другую СУБД (или зачем-то надо парсить дамп скриптом, хотя это сильно на любителя).
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684672
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,
Например, пользователь в Москве, вводит время джоба. Когда идет вставка на сервер, постгрес приводит время, ко времени сервера. Если переменная 21:00 по UTC+03, он ставит по UTC+02 в 21:00. Это время некорректное для джоба, надо в 21:00 по UTC+03 вставлять.
Может я что неправильно делаю?
Когда приводим переменную (21:00) к UTC, а выборку делаем в UTC+02, то все как надо работает.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684708
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте разбираться.

Для начала я привету тест:
Код: plaintext
1.
2.
SELECT now();

"2010-06-13 02:28:50.233445+04"
То есть стоит Московское время. Теперь вот:
Код: plaintext
1.
2.
3.
4.
SET LOCAL TimeZone = '-2';
SELECT now(), now()::timestamp;

"2010-06-12 20:30:37.745314-02";"2010-06-12 20:30:37.745314"
То есть мы поставили локально что у нас -2 GMT и посмотрели результат. Результат простой: now() отдает текущее время с учетом TimeZone клиента.
Тестируем дальше:
Код: plaintext
1.
2.
CREATE TEMP TABLE test AS (
	SELECT now()::timestamp with time zone as time_date, now()::text as string_date
);
То есть мы создали таблицу из 2-х полей:
Дата во внутреннем формате и Дата в текстовом выражении. Теперь поменяем TimeZone:
Код: plaintext
1.
2.
3.
SET LOCAL TimeZone = - 5 ;
SELECT * FROM test;

"2010-06-12 17:33:59.028919-05";"2010-06-13 02:33:59.028919+04"
То есть мы видим, что клиент с +4 GMT вносит now и оно у него 02 33, но сервер (эмулируется через SET LOCAL TimeZone) с -5 GMT видит что это еще 12 число 17 33.

То есть если вы в Москве прибавите один час к now() и запишите это в колонку с типом timestamp tz , то на сервере это будет так-же now() + 1 час, но во времени сервера.

Все эти махинации я сделал что-бы объяснить одну вещь: В случае тасков, задания, которые надо выполнить можно брать путем
Код: plaintext
SELECT * FROM tasks WHERE start_time <= now()
при условии что start_time имеет тип timestamp tz и не надо морочить себе голову насчет GMT, надо только попросить Постгре этим заморочится. Просится путем добавления tz в конец timestamp.

Надеюсь данный опус объяснил вам что ничего никуда конвертировать не надо. Вносите ту дату, которую выбрал пользователь, на кроне или что вы будите запускать - время будет с учетом GMT разницы между клиентами.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684709
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да,
Код: plaintext
1.
2.
SELECT version()

"PostgreSQL 8.4.1 on amd64-portbld-freebsd8.0, compiled by GCC cc (GCC) 4.2.1 20070719  [FreeBSD], 64-bit"
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684711
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamWarstone,
Например, пользователь в Москве, вводит время джоба. Когда идет вставка на сервер, постгрес приводит время, ко времени сервера. Если переменная 21:00 по UTC+03, он ставит по UTC+02 в 21:00. Это время некорректное для джоба, надо в 21:00 по UTC+03 вставлять.
Может я что неправильно делаю?
Когда приводим переменную (21:00) к UTC, а выборку делаем в UTC+02, то все как надо работает.А вообще, в вашем случае полезно еще спросить
Код: plaintext
SELECT now()
И посмотреть какой там GMT стоит. Если +2, то это у вас на клиенте настройки сбиты и их надо править.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684712
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, читать как +3 на клиенте, хотя вы ожидаете +2.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684770
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE "public"."test_dt" (
  "startdt" TIMESTAMP WITH TIME ZONE, 
  "textdatetime" VARCHAR( 100 )
) WITH OIDS;

-----
select now(); -- 2010-06-13 08:03:43 (+02)
----- делаем вставку в таймзоне пользователя
set session timezone to '+4';
insert into test_dt select now(),now()::text;
----- делаем выборку в таймзоне сервера
reset timezone;
select  now(), * from test_dt;

now startdt textdatetime2010-06-13 08:09:13.578234+02 2010-06-13 08:07:53.308389+02 2010-06-13 10:07:53.308389+04




Приводить к UTC не надо.
Так тоже работает.
Код: plaintext
1.
SEt SESSION timezone TO '+4';
insert into test_dt select '2010-06-13 10:21:00'::TIMESTAMPtz, '2010-06-13 10:21:00';

Делаем выборку

Код: plaintext
1.
reset timezone;
select  now(), * from test_dt;

now startdt textdatetime2010-06-13 08:22:13.847904+02 2010-06-13 08:07:53.308389+02 2010-06-13 10:07:53.308389+042010-06-13 08:22:13.847904+02 2010-06-13 08:21:00+02 2010-06-13 10:21:00

А вот когда делать set session timezone to '+4'? летом?
А зимой что ставить? Или можно просто ставить set session timezone to 'Europe/Moscow'?
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684912
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nodir_azamА вот когда делать set session timezone to '+4'? летом?
А зимой что ставить? Или можно просто ставить set session timezone to 'Europe/Moscow'?А set session timezone делать вообще не надо. По умолчанию клиент берет таимзону из настроек ОС, то есть все по умолчанию отслеживаться будет.
...
Рейтинг: 0 / 0
Серверное время и часовые пояса
    #36684966
nodir_azam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Warstone,
Тогда вставка будет неправильной, если не делать set session timezone, нет?
Опять Вы меня запутали :).
Вставим 2010-06-13 10:21:00 и на сервере будет 2010-06-13 10:21:00, а не 2010-06-13 08:21:00.
Я не прав?
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Серверное время и часовые пояса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]