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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2017, 09:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
dynamicsaxhints: Simply about applyTimeZoneOffset and removeTimeZoneOffset methods of DateTimeUtil
Источник: http://dynamicsaxhints.blogspot.com/...ffset-and.html
==============

In this post I want to describe simple rules of working with an unbound UtcDateTimeEdit control in a form:
1) from the database to the user -> applyTimeZoneOffset
2) from the user to the database -> removeTimeZoneOffset
Continue reading for the details.

Problem description
Define how to set and store value of an unbound UtcDateTimeEdit control in a form.

Hints
Play with bound and unbound UtcDateTimeEdit controls in a form.

Solution
Let's create a form with 2 UtcDateTimeEdit controls:
- BoundUtcDateTimeEdit is bound to EcoResDateTimeValue.DateTimeValue table field
- UnboundUtcDateTimeEdit is unbound and is based on AttributeValueDateTime EDT.

The user time zone is set to GMT+02:00:


Case 1. Set a value to Unbound control
Assume that Unbound control value is updated in modified method of Bound control like this:
UnboundUtcDateTimeEdit.dateTimeValue(EcoResDateTimeValue.DateTimeValue);

When today is set into Bound control, Unbound control has 2 hours difference:
Why? Because the user time zone is GMT+2 and table field value is saved in UTC time zone, so EcoResDateTimeValue.DateTimeValue field has "2/3/2017 10:00:00 pm". The same value is presented in Unbound control.
The user time zone must be applied to UTC field value to display correct value in Unbound control:
UnboundUtcDateTimeEdit.dateTimeValue(
DateTimeUtil::applyTimeZoneOffset(EcoResDateTimeValue.DateTimeValue,
DateTimeUtil::getUserPreferredTimeZone()));

Case 2. Store a value from Unbound control
Assume that utcDateTime table field is updated in modified method of Unbound control like this:
EcoResDateTimeValue.DateTimeValue = UnboundUtcDateTimeEdit.dateTimeValue();

When today is set into Unbound control, Bound control has again 2 hours difference:
Why? The value from Unbound control "2/4/2017 12:00:00 am" is treated as UTC time zone value in EcoResDateTimeValue.DateTimeValuefield. The user time zone is applied by kernel to UTC time zone field value, so Bound control has "2/4/2017 02:00:00 am".
The user time zone must be removed from control value to get UTC time zone value, which can be set to table field:
EcoResDateTimeValue.DateTimeValue =
DateTimeUtil::removeTimeZoneOffset(UnboundUtcDateTimeEdit.dateTimeValue(),
DateTimeUtil::getUserPreferredTimeZone());

Conclusions
DateTime value is stored in database in UTC.
The user time zone is usually different from UTC.
When a value from the database must be presented in unbound control, the user time zone offset must be applied to the value. Use DateTimeUtil::applyTimeZoneOffset() method.
When a value entered by the user into unbound control must be stored in database, the user time zone offset must be removed to get UTC value. Use DateTimeUtil::removeTimeZoneOffset() method.
Bound control values are handled automatically by kernel.

Источник: http://dynamicsaxhints.blogspot.com/...ffset-and.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.