169 похожих чатов

Помогите разобрать как правильно обработать задачу по часовым поясам. Мы записываем

события и потом отображаем их список.

Предположим сейчас 1 октября 00:00 ночи, мы в Москве (+3) . Мы открыли приложение и записываем событие. Так как время нам отображается то мы хотели бы видеть актуальное время - наше локальное. Вот мы записали, перевели в UTC, которое будет 29 сентября в 21:00.

Теперь делаем выборку операций за месяц. Берем локальный месяц и переводим в UTC, выборка начнется от 29 сентября с 21:00. Пока все хорошо.

Теперь перелетаем в Нью-Йорк с часовым поясом -4 и делаем тоже выборку за месяц, переводя локальный месяц в UTC. Выборка начинается с 1 октября с 04:00. Получается у нас не войдет событие записанное в Москве в события, которые мы читаем в Нью-Йорке.

Что с этим делать, как решить дилему?

7 ответов

7 просмотров

Тут кажется вы сами себя запутали. 1) Все события вы пишите в UTC+0, что по сути хорошо. 2) При отображении пользователю, вы переводите в его часовой пояс и отображаете. Далее путаница происходит в интерпретации для другого часового пояса, возьмем событие по мск (+3) 1го числа в 00 часов. По гринвичу оно произойдет в 21 час ночи 31го предыдущего месяца, а в Нью-Йорке (-4) оно произойдет в 17 часов 31го числа предыдущего месяца.

Norim- Автор вопроса
Serge Rumyantsev
Тут кажется вы сами себя запутали. 1) Все события ...

Да, но разве я как пользователь не ожидал бы видеть ту же операцию в том же месяце не смотря на смену часового пояса?

Вы ожидаете отображение в том часовом поясе, в котором находитесь же?

Norim
Да, но разве я как пользователь не ожидал бы видет...

Если речь идет об отчетности за месяц по бирже скажем, или по расходу данных, то там всегда берется с первого по последний час месяца по времени сервера или биржи. Прыгай по земле сколько хочешь но в отчет попадет по одному времени.

Norim- Автор вопроса
Serge Rumyantsev
Вы ожидаете отображение в том часовом поясе, в кот...

Ну верно, да, при записи. Но вот я перелетел в Нью-Йорк, разве я не удивлюсь, увидев, что операция не отобразится в выборке за месяц? Думал бы, например, почему она пропала с текущего месяца? 🤔

Norim
Ну верно, да, при записи. Но вот я перелетел в Нью...

Пропала, так как ты в другом часовом поясе, где эта операция (момент времени), отнесена к другому месяцу.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Good afternoon, I just started learning php in conjunction with mysql. I am registering a system on a local Mamp server using phpMyAdmin. It seems to be stored normally in the...
ManGo
1
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Добрый день! Такая проблема возникла, написал код на Python, который компилирует, собирает и запускает файлы .s А в случае работы нужно то же самое делать для .asm Чем эти фа...
A Mori
5
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Карта сайта