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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.01.2016, 14:45   #1  
Lanai is offline
Lanai
Участник
 
35 / 29 (1) +++
Регистрация: 09.08.2005
Что-то с временными зонами
Код:
info(enum2str(DateTimeUtil::getClientMachineTimeZone()));
info(enum2str(DateTimeUtil::getCompanyTimeZone()));
info(enum2str(DateTimeUtil::getOriginatingTimeZone(DateTimeUtil::getSystemDateTime())));
info(enum2str(DateTimeUtil::getUserPreferredTimeZone()));

Выдает результат:
Info Сообщение (14:41:22) (GMT+03:00) Москва, Санкт-Петербург, Волгоград
Info Сообщение (14:41:22) (GMT+03:00) Москва, Санкт-Петербург, Волгоград
Info Сообщение (14:41:22) (GMT) Касабланка, Монровия, Рейкьявик
Info Сообщение (14:41:22) (GMT+03:00) Москва, Санкт-Петербург, Волгоград

А код:
info(DateTimeUtil::toStr(DateTimeUtil::getSystemDateTime()));

Выдает:
2016-01-15T11:42:05
Показывает время на 3 часа меньше.

В Сервис - Дата сеанса:
Текущая временная зона = (UTC+03:00) Волгоград, Москва, Санкт-Петербург (RTZ 2)
Временная зона сеанса = (UTC+03:00) Волгоград, Москва, Санкт-Петербург
Без "(RTZ 2)"

Если щелкнуть на поле с Временной зоной сеанса, то значение в нём исчезает.

Что это означает? Что не так с временными зонами? Как исправить?
Старый 15.01.2016, 15:42   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
Насколько я понимаю, info вам показывает время в UTC.
Если вы хотите вывести в своём временном поясе - переводите в него.
В DateTimeUtil есть метод для этого.
__________________
Zhirenkov Vitaly
Старый 15.01.2016, 15:56   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Lanai Посмотреть сообщение
info(enum2str(DateTimeUtil::getOriginatingTimeZone(DateTimeUtil::getSystemDateTime())));

Выдает результат:
Info Сообщение (14:41:22) (GMT) Касабланка, Монровия, Рейкьявик
На сколько я понимаю, функция getOriginatingTimeZone() извлекает тайм-зону из сохраненных в БД значений полей типа DateTime (для которых сохраняется эта тайм-зона), за исключением системных ModifiedDateTime и CreatedDateTime

Функции getSystemDateTime(), newDateTime() класса DateTimeUtil эту информацию в возвращаемом значении не сохраняют

Цитата:
Сообщение от Lanai Посмотреть сообщение
А код:
info(DateTimeUtil::toStr(DateTimeUtil::getSystemDateTime()));

Выдает:
2016-01-15T11:42:05
Показывает время на 3 часа меньше.
все правильно.
преобразование в строку не учитывает тайм-зону

Для того, что бы тайм-зона учлась, это надо проделать явно.
Например, с помощью функции DateTimeUtil::applyTimeZoneOffset() (надо учесть, что для возвращаемого значения просто прибавится время смещения таймзоны)

Контролы на формах умеют учитывать текущее время пользователя автоматически (если не было указано иное с помощью свойства timezonePreference)

Цитата:
Сообщение от Lanai Посмотреть сообщение
В Сервис - Дата сеанса:
Текущая временная зона = (UTC+03:00) Волгоград, Москва, Санкт-Петербург (RTZ 2)
Временная зона сеанса = (UTC+03:00) Волгоград, Москва, Санкт-Петербург
Без "(RTZ 2)"

Если щелкнуть на поле с Временной зоной сеанса, то значение в нём исчезает.

Что это означает? Что не так с временными зонами? Как исправить?
Если у вас используется международная версия Windows с установленным русским MUI, то поможет вот это Y2K11 или переход на зимнее время

либо, у вас не сделаны изменения в ktd-файле для новых названий тайм-зон. Посмотрите в той же теме - выше об этом пишется
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: AnGor (1), MazZzDaI (1).
Старый 29.06.2016, 22:25   #4  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
После каждой инициализации переменной типа utcDateTime необходимо явно указывать TimeZone функцией DateTimeUtil::applyTimeZoneOffset()
Старый 18.09.2016, 23:54   #5  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Ответ был найден тут.
Необходимо было внести изменения в таблицу TimeZonesRulesData.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как лучше отлаживать код с временными таблицами, recordset'ами, set'ами, map'ами и прочими сложными структурами? mazzy DAX: Прочие вопросы 5 29.07.2011 19:08
Как перенести данные между временными таблицами MSSQL и АОТ velk DAX: Программирование 5 08.08.2006 17:27

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

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

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