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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.06.2011, 14:51   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как задать литерал для DateTime с учетом TimeZone?
Как задать литерал для DateTime с учетом TimeZone?
Здесь увидел способ записи литералов типа DateTime
http://msdn.microsoft.com/en-us/library/cc637978.aspx

X++:
static void jobTestDatetime2str( Args _args )
{
    utcdatetime utc2 = 1959-06-17T15:44:33;
    str s3;
    ;
    s3 = datetime2Str( utc2 );
    info( s3 );
}
отлично. но такой способ записи дает время по гринвичу.
можно ли задать литерал с временем по Москве?

чтобы наконец не заниматься гемороем типа
DateTimeUtil::newDateTime(17\06\1959, "15:44:33", Timezone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD);
__________________
полезное на axForum, github, vk, coub.
Старый 14.06.2011, 14:55   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
можно создать пару методов на global для перевода в нужный timezone, и их использовать везде
За это сообщение автора поблагодарили: mazzy (1).
Старый 14.06.2011, 16:47   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
В стандарте UTC есть способы задания конкретной зоны в литералах. Так можно задать Z для указания, брать зону, установленную на компе или прямо указывать смещение. То есть, что-то типа того:
1959-06-17T15:44:33Z
1959-06-17T15:44:33+00:03
В DAX об этом, судя по всему, не позаботились - выдает ошибку. Я пытался в разных сочетаниях добавлять разные символы (слеши, апострофы и т.п.), но увы
За это сообщение автора поблагодарили: mazzy (2).
Старый 15.06.2011, 11:12   #4  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Цитата:
Сообщение от mazzy Посмотреть сообщение
чтобы наконец не заниматься гемороем типа
DateTimeUtil::newDateTime(17\06\1959, "15:44:33", Timezone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD);
--> http://www.axaptapedia.com/Current_Time


Варианты гемороя:
X++:
datetime2str(DateTimeUtil::applyTimeZoneOffset(_inbox.AlertCreatedDateTime, DateTimeUtil::getUserPreferredTimeZone()), DateFlags::FormatAll)

//или

 info(strfmt("%1", DateTimeUtil::applyTimeZoneOffset(demo.UtcField,DateTimeUtil::getClientMachineTimeZone())));
UTCDatetime и EventInbox
http://www.axaptapedia.com/UtcDateTime

Convert from Time Zone Before Persisting in X++
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
За это сообщение автора поблагодарили: mazzy (2).
Старый 15.06.2011, 11:24   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Спасибо.
Но вопрос был о литерале, а не о конвертации

например, я делаю маленький ждобик, который вытаскивает записи по дате создания. Хочу чтобы вытащились вчерашние с 15:00 до 16:00. И не хочу парится с многоэтажными конструкциями.

в ax4 и раньше можно было сделать что-то вроде
X++:
while select custTrans
where custTrans.createdDate >= 14\06\2011
   && custTrans.createdDate <= 14\06\2011
   && custTrans.createdTime >= str2time("15:00")
   && custTrans.createdTime <= str2time("16:00")
{
...
замечательный литерал 14\06\2011. легко можно использовать на скорую руку

теперь надо писать надо меньше. Это радует.
Но блин, время надо указывать по гринвичу. Что чертовски раздражает и приводит к ошибкам.
X++:
while select custTrans
where custTrans.createdDateTime >= 2011-06-14T11:00:00
   && custTrans.createdDateTime <= 2011-06-14T12:00:00
{
...
Как и Raven Melancholic тоже пытался использовать доп.символы для часового пояса. тоже не получилось. поэтому спросил - может кто знает?

добавил ссылки на msdn:
http://msdn.microsoft.com/en-us/libr...05(ax.60).aspx
http://msdn.microsoft.com/en-us/libr...(v=ax.60).aspx
http://msdn.microsoft.com/en-us/libr...(v=ax.60).aspx
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 15.06.2011 в 11:31. Причина: добавил ссылки на msdn
Старый 15.06.2011, 11:27   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
кстати, литералов для времени тоже нет
http://msdn.microsoft.com/en-us/libr...80(ax.60).aspx
__________________
полезное на axForum, github, vk, coub.
Старый 15.06.2011, 11:33   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
В Global есть два замечательных метода datetobeginUtcDateTime() и datetoendUtcDateTime(). Они, правда, требуют явного указания временной зоны, но если взять их за основу и для параметра tz прописать значение по умолчанию, скажем, DateTimeUtil::getUserPreferredTimeZone(), то получится, наверно, то, что нужно.
За это сообщение автора поблагодарили: mazzy (2).
Старый 15.06.2011, 11:38   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
В Global есть два замечательных метода datetobeginUtcDateTime() и datetoendUtcDateTime().
э-э-э... нет, это тоже не то.
совет сводится к совету ice

Цитата:
Сообщение от ice Посмотреть сообщение
можно создать пару методов на global для перевода в нужный timezone, и их использовать везде
__________________
полезное на axForum, github, vk, coub.
Старый 15.06.2011, 12:04   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не совсем догоняю в чем проблема.
Если устраивал вариант str2time("16:00") то почему нельзя написать свою функцию в глобале, которая примет 2 параметра, литерал для даты и строку со временем и вернет сформированный utcDateTime.
Все равно временная зона нужна либо текущая либо из настроек юзера либо из настроек компании. Вариантов немного.

По удобству использования получится примерно то же самое что и в примере для ax4.0.
Старый 15.06.2011, 12:12   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
то почему нельзя написать свою функцию
почему нельзя?
просто неаккуратненько как-то
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: lev (1).
Старый 15.06.2011, 13:07   #11  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
;)
Цитата:
Сообщение от mazzy Посмотреть сообщение
Спасибо.
Но вопрос был о литерале, а не о конвертации
Да понятно , но все равно придется
Цитата:
Сообщение от mazzy Посмотреть сообщение
заниматься геморроем
Для этого и привел примеры геморроя конвертации (само напрашивалось дополнить тему такими линками)
т.е. код пригодится в новом методе класса Global, где
Цитата:
Сообщение от Logger Посмотреть сообщение
..... временная зона нужна либо текущая либо из настроек юзера либо из настроек компании. Вариантов немного.
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 15.07.2011, 20:52   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Poleax Посмотреть сообщение
--> http://www.axaptapedia.com/Current_Time


Варианты гемороя:
X++:
datetime2str(DateTimeUtil::applyTimeZoneOffset(_inbox.AlertCreatedDateTime, DateTimeUtil::getUserPreferredTimeZone()), DateFlags::FormatAll)

//или

 info(strfmt("%1", DateTimeUtil::applyTimeZoneOffset(demo.UtcField,DateTimeUtil::getClientMachineTimeZone())));
UTCDatetime и EventInbox
http://www.axaptapedia.com/UtcDateTime

Convert from Time Zone Before Persisting in X++
Замена DateTimeUtil::newDateTime() на DateTimeUtil::applyTimeZoneOffset() неравнозначна.
newDateTime() - возвращает указанное время в указанной временной зоне.
applyTimeZoneOffset() - прибавляет к переданному времени смещение между зоной UTC и указанной временной зоной, при этом, в возвращаемом значении зона будет такая же, как и в переданном параметре.

По теме топика - я сделал для себя макрос #Z
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (5).
Теги
datetime, utcdatetime, временная зона, время, литерал

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Aku: Dynamics AX AIF Webservices &ndash; Date, Time und Datetime Datentypen Blog bot DAX Blogs 0 22.04.2011 17:11
jinx: Dynamics AX AIF Webservices &ndash; Date, Time und Datetime Datentypen Blog bot DAX auf Deutsch 0 12.06.2010 01:05
axperf: Create RecID index on tables with Created/Modified DateTime fields Blog bot DAX Blogs 0 20.06.2009 10:05
Задать критерий типа !="" bobski DAX: Программирование 3 29.12.2008 08:23
Планирование производства с учетом поставки материалов Biosoft DAX: Функционал 1 06.05.2003 06:09
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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