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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2018, 18:42   #1  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Сохранение в БД значений в формате UTCDateTime
Здравствуйте.

Столкнулся с ситуацией: есть кастомная таблица с полем типа UTCTimestamp. Когда создаю в ней поле (вызываю класс с диалоговым окном), в котором указываю дату и время, затем, никак не обрабатывая введённые значения делаю insert и вижу на форме значение на 4 часа больше (у меня указан в настройках клиента предпочтительный часовой пояс +04:00). В таблице на SQL Server время указано в том виде, как я его ввёл.

И если указать в настройках клиента часовой пояс +00:00 время отображается правильно.


Я верно понимаю, что это происходит именно из-за того, что я при присвоении значения из диалога полю таблицы, не вычитаю смещение часового пояса?

Dynamics Ax 2012 R3.
Старый 27.12.2018, 22:25   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Да, совершенно верно.
Поля, привязанные к датасорсу, сами это делают. А вот значения, введенные в поле формы, не привязанное к датасорсу имеют значение, включающее смещение UTC текущего пользователя. Соответственно, для сохранения в базу данных это значение нужно очищать от смещения текущего пользователя.
За это сообщение автора поблагодарили: S.Kuskov (2), mikki_messer (1).
Старый 28.12.2018, 09:56   #3  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Да, совершенно верно.
Поля, привязанные к датасорсу, сами это делают. А вот значения, введенные в поле формы, не привязанное к датасорсу имеют значение, включающее смещение UTC текущего пользователя. Соответственно, для сохранения в базу данных это значение нужно очищать от смещения текущего пользователя.
Спасибо, я так и думал. В общем, ситуацию исправила такая конструкция:
X++:
tableName.UtcDateTimeField  = DateTimeUtil::removeTimeZoneOffset(dlgDateTime.value(),DateTimeUtil::getUserPreferredTimeZone());
Старый 28.12.2018, 10:13   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
На свежую голову почитал что сам написал.
Цитата:
имеют значение, включающее смещение UTC текущего пользователя
Естественно, никакого смещения там нет, там просто значение. Это пользователь ожидает, что то что он ввел, система обработает справедливо считая, что это значение соответствует его пользователя часовому поясу.
Старый 29.12.2018, 11:15   #5  
mikki_messer is offline
mikki_messer
Участник
 
91 / 20 (1) +++
Регистрация: 20.04.2010
Адрес: Ростов-на-Дону
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
На свежую голову почитал что сам написал.

Естественно, никакого смещения там нет, там просто значение. Это пользователь ожидает, что то что он ввел, система обработает справедливо считая, что это значение соответствует его пользователя часовому поясу.
Я так и понял.
Старый 04.01.2019, 09:23   #6  
БАХ43 is offline
БАХ43
Участник
 
92 / 54 (2) ++++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Там еще можно в расширенном типе данных, используемом для поля таблицы выставить свойство TimezonePreference
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!
За это сообщение автора поблагодарили: trud (2), mikki_messer (1).
Теги
2012 r3, timezone, utctimestamp, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Зачем нужно поле для хранения временной зоны для значений полей типа UtcDateTime? gl00mie DAX: Функционал 4 28.11.2010 19:58
Последовательная замена множества уникальных значений на другие без возникновения дубликатов gl00mie DAX: Программирование 23 24.11.2010 15:05
emeadaxsupport: Passing UtcDateTime values in extended query syntax Blog bot DAX Blogs 0 10.05.2010 21:05
Kashperuk Ivan: UtcDateTime in Dynamics AX 2009 Blog bot DAX Blogs 0 17.02.2010 15:05
Сохранение значений полей после ошибки ahtoh DAX: Программирование 8 20.06.2008 13:32
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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