05.07.2010, 15:40 | #1 |
Участник
|
Вопрос по временным зонам.
В общем и целом, модель проблемы следующая:
Есть данные на сервере(настроечная таблица, содержащая расписание некоторых действий. Время выполнения того или иного действия - время по Германии(GMT+1)) А клиенты, выполняющие те или иные действия должны выполнять действия регламента с поправкой на свой временной пояс. Например, в таблице значится, что действие А клиентам нужно выполнять в 10:00 по Германии (GMT+1), следовательно клиенту в Афинах нужно выполнить это действие в 11:00 локального времени(GMT+2). Вот, следовательно вопрос, как перевести время в заданном временном поясе X в локальное время или время с заданным часовым поясом Y средствами Аксапты.
__________________
Axapta has seduced me deadly! |
|
05.07.2010, 15:49 | #2 |
Участник
|
В 2009 при использовании типа DateTime это делается автоматически при отображении данных из полей. Если хочется манипулировать вручную, см методы класса DateTimeUtil
\System Documentation\Classes\DateTimeUtil\applyTimeZoneOffset. \System Documentation\Classes\DateTimeUtil\getUserPreferredTimeZone В более ранних, не знаю. В 4 я бы помотрел на дотнетовские классы |
|
05.07.2010, 15:58 | #3 |
Участник
|
Да, забыл написать, что 4ка. Про 5ку уже прочел на момент написания, что автоматически. Соответственно, в 4ке ни автоматики, ни класса DateTimeUtil....
Буду смотреть в сторону WinApi.
__________________
Axapta has seduced me deadly! |
|
05.07.2010, 17:00 | #4 |
Участник
|
Действия выполняются пакетными заданиями автоматически или пользователями вручную ?
|
|
05.07.2010, 17:11 | #5 |
Участник
|
Может кому будет полезно: в наиболее общем виде эту проблему стоило бы решать посредством использования 2 WinApi: RtlLocalTimeToSystemTime и SystemTimeToTzSpecificLocalTime (получаем системное(UTC) время, потом преобразовуем это время в время в выбранном временном поясе). Трудности в том, что в Аксапте обертки вокруг RtlLocalTimeToSystemTime вообще нет и её нужно создавать. А SystemTimeToTzSpecificLocalTime сделанна таким образом, что преобразование всегда идет в текущую временную зону, то есть для этого метода и для этих целей нужно делать другую обертку.
Решение же проблемы в конкретном случае оказалось куда более простым. Создаем серверный метод на классе, возвращающий timenow() сервера - имеем серверной время в серверном временном поясе. Почему решение только в конкретном случае: потому что записи могут содержать время не обязательно во временно поясе сервера. ПыСы. Вроде бы ничего нетривиального, но подумать пришлось. Может быть, кому то на будущее пригодится.
__________________
Axapta has seduced me deadly! |
|
05.07.2010, 17:15 | #6 |
Участник
|
В том-то и дело, что способ хитрый. Это скажем так эдакий трекер определенных действий, которые производятся пользователями(а могут и не производиться), но треккинг актуален только в определенное время, заданное параметрами, то есть, не перманентно.
__________________
Axapta has seduced me deadly! |
|
06.07.2010, 00:01 | #7 |
Участник
|
Цитата:
Сообщение от HorrR
в наиболее общем виде эту проблему стоило бы решать посредством использования 2 WinApi: RtlLocalTimeToSystemTime и SystemTimeToTzSpecificLocalTime. Трудности в том, что в Аксапте обертки вокруг RtlLocalTimeToSystemTime вообще нет и её нужно создавать. А SystemTimeToTzSpecificLocalTime сделанна таким образом, что преобразование всегда идет в текущую временную зону, то есть для этого метода и для этих целей нужно делать другую обертку.
|
|
|
За это сообщение автора поблагодарили: Logger (2). |
Теги |
time, time zone, время, часовые пояса |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|