AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.07.2010, 15:40   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Вопрос по временным зонам.
В общем и целом, модель проблемы следующая:

Есть данные на сервере(настроечная таблица, содержащая расписание некоторых действий. Время выполнения того или иного действия - время по Германии(GMT+1))

А клиенты, выполняющие те или иные действия должны выполнять действия регламента с поправкой на свой временной пояс.

Например, в таблице значится, что действие А клиентам нужно выполнять в 10:00 по Германии (GMT+1), следовательно клиенту в Афинах нужно выполнить это действие в 11:00 локального времени(GMT+2).

Вот, следовательно вопрос, как перевести время в заданном временном поясе X в локальное время или время с заданным часовым поясом Y средствами Аксапты.
__________________
Axapta has seduced me deadly!
Старый 05.07.2010, 15:49   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В 2009 при использовании типа DateTime это делается автоматически при отображении данных из полей. Если хочется манипулировать вручную, см методы класса DateTimeUtil
\System Documentation\Classes\DateTimeUtil\applyTimeZoneOffset.
\System Documentation\Classes\DateTimeUtil\getUserPreferredTimeZone

В более ранних, не знаю. В 4 я бы помотрел на дотнетовские классы
Старый 05.07.2010, 15:58   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Да, забыл написать, что 4ка. Про 5ку уже прочел на момент написания, что автоматически. Соответственно, в 4ке ни автоматики, ни класса DateTimeUtil....

Буду смотреть в сторону WinApi.
__________________
Axapta has seduced me deadly!
Старый 05.07.2010, 17:00   #4  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Действия выполняются пакетными заданиями автоматически или пользователями вручную ?
Старый 05.07.2010, 17:11   #5  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Может кому будет полезно: в наиболее общем виде эту проблему стоило бы решать посредством использования 2 WinApi: RtlLocalTimeToSystemTime и SystemTimeToTzSpecificLocalTime (получаем системное(UTC) время, потом преобразовуем это время в время в выбранном временном поясе). Трудности в том, что в Аксапте обертки вокруг RtlLocalTimeToSystemTime вообще нет и её нужно создавать. А SystemTimeToTzSpecificLocalTime сделанна таким образом, что преобразование всегда идет в текущую временную зону, то есть для этого метода и для этих целей нужно делать другую обертку.

Решение же проблемы в конкретном случае оказалось куда более простым. Создаем серверный метод на классе, возвращающий timenow() сервера - имеем серверной время в серверном временном поясе. Почему решение только в конкретном случае: потому что записи могут содержать время не обязательно во временно поясе сервера.

ПыСы. Вроде бы ничего нетривиального, но подумать пришлось. Может быть, кому то на будущее пригодится.
__________________
Axapta has seduced me deadly!
Старый 05.07.2010, 17:15   #6  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Bober Посмотреть сообщение
Действия выполняются пакетными заданиями автоматически или пользователями вручную ?
В том-то и дело, что способ хитрый. Это скажем так эдакий трекер определенных действий, которые производятся пользователями(а могут и не производиться), но треккинг актуален только в определенное время, заданное параметрами, то есть, не перманентно.
__________________
Axapta has seduced me deadly!
Старый 06.07.2010, 00:01   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от HorrR Посмотреть сообщение
в наиболее общем виде эту проблему стоило бы решать посредством использования 2 WinApi: RtlLocalTimeToSystemTime и SystemTimeToTzSpecificLocalTime. Трудности в том, что в Аксапте обертки вокруг RtlLocalTimeToSystemTime вообще нет и её нужно создавать. А SystemTimeToTzSpecificLocalTime сделанна таким образом, что преобразование всегда идет в текущую временную зону, то есть для этого метода и для этих целей нужно делать другую обертку.
Не учите людей плохому Во-первых, RtlLocalTimeToSystemTime - это не WinAPI-функция, это внутренняя функция ntdll, интерфейс которой не обязательно будет сохраняться между версиями виндов (вместо нее стоит воспользоваться "настоящей" WinAPI-функцией LocalFileTimeToFileTime), а во-вторых, в 2009-й появился AOS под x64, который не поддерживает DLLFunction в принципе, поэтому такое решение - полумера, не имеющая перспектив в свете обновления на последние версии Аксапты (и поэтому же WinAPIServer в 2009-й переписан на .NET).
Цитата:
Сообщение от HorrR Посмотреть сообщение
Решение же проблемы в конкретном случае оказалось куда более простым. Создаем серверный метод на классе, возвращающий timenow() сервера - имеем серверной время в серверном временном поясе.
По-моему, вы - хотя бы отчасти - скрываете сложность реализации: timenow() выдает число секунд с полуночи. Что, если ваша целевая временнАя зона находится, к примеру, восточнее временнОй зоны сервера? В этом случае вам придется отматывать назад не только время, но и потенциально дату (час ночи 16-го числа в одной зоне может быть десятью вечера 15-го в другой).
За это сообщение автора поблагодарили: Logger (2).
Теги
time, time zone, время, часовые пояса

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос по проектам Фиксированная цена PSA DAX: Функционал 9 29.06.2006 14:23
Вопрос по временным таблицам Кирилл DAX: Программирование 3 15.04.2004 14:09
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36
Вопрос к пользователю при сохранении данных в таблице Anais DAX: Программирование 1 19.03.2004 10:28

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:33.