14.06.2011, 14:51 | #1 |
Участник
|
Как задать литерал для 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); |
|
14.06.2011, 14:55 | #2 |
Участник
|
можно создать пару методов на global для перевода в нужный timezone, и их использовать везде
|
|
|
За это сообщение автора поблагодарили: mazzy (1). |
14.06.2011, 16:47 | #3 |
Участник
|
В стандарте UTC есть способы задания конкретной зоны в литералах. Так можно задать Z для указания, брать зону, установленную на компе или прямо указывать смещение. То есть, что-то типа того:
1959-06-17T15:44:33Z 1959-06-17T15:44:33+00:03 В DAX об этом, судя по всему, не позаботились - выдает ошибку. Я пытался в разных сочетаниях добавлять разные символы (слеши, апострофы и т.п.), но увы |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
15.06.2011, 11:12 | #4 |
Модератор
|
Цитата:
Варианты гемороя: X++: datetime2str(DateTimeUtil::applyTimeZoneOffset(_inbox.AlertCreatedDateTime, DateTimeUtil::getUserPreferredTimeZone()), DateFlags::FormatAll) //или info(strfmt("%1", DateTimeUtil::applyTimeZoneOffset(demo.UtcField,DateTimeUtil::getClientMachineTimeZone()))); 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 |
Участник
|
Спасибо.
Но вопрос был о литерале, а не о конвертации например, я делаю маленький ждобик, который вытаскивает записи по дате создания. Хочу чтобы вытащились вчерашние с 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") { ... теперь надо писать надо меньше. Это радует. Но блин, время надо указывать по гринвичу. Что чертовски раздражает и приводит к ошибкам. X++: while select custTrans where custTrans.createdDateTime >= 2011-06-14T11:00:00 && custTrans.createdDateTime <= 2011-06-14T12:00:00 { ... добавил ссылки на 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 Последний раз редактировалось mazzy; 15.06.2011 в 11:31. Причина: добавил ссылки на msdn |
|
15.06.2011, 11:27 | #6 |
Участник
|
кстати, литералов для времени тоже нет
http://msdn.microsoft.com/en-us/libr...80(ax.60).aspx |
|
15.06.2011, 11:33 | #7 |
Участник
|
В Global есть два замечательных метода datetobeginUtcDateTime() и datetoendUtcDateTime(). Они, правда, требуют явного указания временной зоны, но если взять их за основу и для параметра tz прописать значение по умолчанию, скажем, DateTimeUtil::getUserPreferredTimeZone(), то получится, наверно, то, что нужно.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
15.06.2011, 11:38 | #8 |
Участник
|
Цитата:
совет сводится к совету ice |
|
15.06.2011, 12:04 | #9 |
Участник
|
Не совсем догоняю в чем проблема.
Если устраивал вариант str2time("16:00") то почему нельзя написать свою функцию в глобале, которая примет 2 параметра, литерал для даты и строку со временем и вернет сформированный utcDateTime. Все равно временная зона нужна либо текущая либо из настроек юзера либо из настроек компании. Вариантов немного. По удобству использования получится примерно то же самое что и в примере для ax4.0. |
|
15.06.2011, 12:12 | #10 |
Участник
|
почему нельзя?
просто неаккуратненько как-то |
|
|
За это сообщение автора поблагодарили: lev (1). |
15.06.2011, 13:07 | #11 |
Модератор
|
Да понятно , но все равно придется Для этого и привел примеры
т.е. код пригодится в новом методе класса Global, где
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
15.07.2011, 20:52 | #12 |
Участник
|
Цитата:
Сообщение от 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()))); http://www.axaptapedia.com/UtcDateTime Convert from Time Zone Before Persisting in X++ newDateTime() - возвращает указанное время в указанной временной зоне. applyTimeZoneOffset() - прибавляет к переданному времени смещение между зоной UTC и указанной временной зоной, при этом, в возвращаемом значении зона будет такая же, как и в переданном параметре. По теме топика - я сделал для себя макрос #Z
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
Теги |
datetime, utcdatetime, временная зона, время, литерал |
|
|