04.08.2011, 09:22 | #1 |
MCTS
|
UtcDateTime
Как так может получиться?
X++: transDateTime transDateTime = DateTimeUtil::newDateTime(systemdateget(), timenow(),DateTimeUtil::getUserPreferredTimeZone()) ;
utcdatetime startDateTime = datetobeginUtcDateTime(systemdateget());
utcdatetime endDateTime = datetoendUtcDateTime(systemdateget());
;
info(strfmt("%1 | %2 | %3", startDateTime, transDateTime , endDateTime)); Цитата:
03.08.2011 20:00:00 | 04.08.2011 07:22:03 | 04.08.2011 19:59:59
|
|
04.08.2011, 09:41 | #2 |
MCTS
|
Подскажите, пожалуйста, если есть поле с типом UtcDateTime, то как отфильровать записи за какой-то определенный день?
datetobeginUtcDateTime и datetoendUtcDateTime выдают какую-то фигню... |
|
04.08.2011, 09:41 | #3 |
Участник
|
strfmt() выводит время UTC - без учета часового пояса
Для целей ВЫВОДА информации в нужной часовой зоне можно воспользоваться DateTimeUtil::applyTimeZoneOffset() Про различие в использовании newDateTime() и applyTimeZoneOffset() можно посмотреть здесь Как задать литерал для DateTime с учетом TimeZone?
__________________
Axapta v.3.0 sp5 kr2 |
|
04.08.2011, 09:46 | #4 |
Участник
|
Цитата:
На форме в QueryRun или в запросе select? И по какому полю? Созданному вами или по системному (типа CreatedDateTime)? Вообще, фильтрация учитывает временную зону. Еще, в RU7 datetobeginUtcDateTime и datetoendUtcDateTime трубуют в качестве параметра передачи временной зоны. Возможно, в вашей версии там подставляется какое-то значение по умолчанию
__________________
Axapta v.3.0 sp5 kr2 |
|
04.08.2011, 11:24 | #5 |
MCTS
|
Цитата:
Сообщение от AndyD
А отфильтровывать где?
На форме в QueryRun или в запросе select? И по какому полю? Созданному вами или по системному (типа CreatedDateTime)? Вообще, фильтрация учитывает временную зону. Еще, в RU7 datetobeginUtcDateTime и datetoendUtcDateTime трубуют в качестве параметра передачи временной зоны. Возможно, в вашей версии там подставляется какое-то значение по умолчанию Просто, мне всего лишь нужно вытащить из таблицы записи начиная с Дата_00:00:00 по Дата_23:23:59. Ведь тут по сути не имеет значения настройки временной зоны? Последний раз редактировалось Eldar9x; 04.08.2011 в 11:28. |
|
04.08.2011, 11:34 | #6 |
MCTS
|
Вобщем, нужен аналог следующей конструкции:
X++: while select tmpShtrihMTable order by TransDateTime { if (DateTimeUtil::date(tmpShtrihMTable.TransDateTime) != _transDate) // _transDate нужная дата continue; |
|
04.08.2011, 12:04 | #7 |
Участник
|
В RU7 срабатывает так
X++: while select tmpShtrihMTable where tmpShtrihMTable.TransDateTime != datetobeginUtcDateTime(_transDate, DateTimeUtil::getUserPreferredTimeZone()) order by TransDateTime { X++: while select tmpShtrihMTable where tmpShtrihMTable.TransDateTime != DateTimeUtil::newDateTime(_transDate, 0, DateTimeUtil::getUserPreferredTimeZone()) order by TransDateTime { info(strfmt("%1", DateTimeUtil::applyTimeZoneOffset( tmpShtrihMTable.TransDateTime, DateTimeUtil::getUserPreferredTimeZone())));
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Eldar9x (3). |
04.08.2011, 19:33 | #8 |
Участник
|
Цитата:
X++: DateTimeUtil::date(tmpShtrihMTable.TransDateTime) != _transDate X++: tmpShtrihMTable.TransDateTime != datetobeginUtcDateTime(_transDate, DateTimeUtil::getUserPreferredTimeZone()) Цитата:
X++: Timezone tz = // ... while select tmpShtrihMTable where tmpShtrihMTable.TransDateTime >= datetobeginUtcDateTime(_transDate, tz) && tmpShtrihMTable.TransDateTime <= datetoendUtcDateTime(_transDate, tz) |
|
04.08.2011, 20:58 | #9 |
Участник
|
Да, точно, был невнимателен
__________________
Axapta v.3.0 sp5 kr2 |
|
11.10.2011, 15:25 | #10 |
Участник
|
Возникла такая проблема при считывании поля записи типа TransDateTime с последующим присвоением переменной типа TransDateTime происходит автоматическое преобразование в utc, есть ли какая то функция обратного преобразования или только сложением\вычитанием?
|
|
11.10.2011, 18:28 | #11 |
Участник
|
Ничего такого не происходит на самом деле: данные в полях типа UtcDateTime хранятся в UTC (сюрприз! ), поэтому присвоение значения поля переменной никак это значение автоматически не меняет - это только на формах ядро умеет автоматом переводить значения из UTC во временную зону, настроенную у пользователя, при отображении и обратно - при редактировании значения поля. В коде же нужно самостоятельно переводить значение из UTC в нужную временную зону, если есть такая потребность.
|
|
12.10.2011, 08:14 | #12 |
Участник
|
Цитата:
Сообщение от gl00mie
Ничего такого не происходит на самом деле: данные в полях типа UtcDateTime хранятся в UTC (сюрприз! ), поэтому присвоение значения поля переменной никак это значение автоматически не меняет - это только на формах ядро умеет автоматом переводить значения из UTC во временную зону, настроенную у пользователя, при отображении и обратно - при редактировании значения поля. В коде же нужно самостоятельно переводить значение из UTC в нужную временную зону, если есть такая потребность.
|
|
12.10.2011, 08:38 | #13 |
Участник
|
Это заблуждение: время в полях базового типа UtcDateTime (включая TransDateTime) хранится в UTC - именно в этом и смысл таких полей (ну, помимо хранения времени в том же поле), именно поэтому базовый тип называется так, а не просто DateTime, однако, при отображении на форме, включая обозреватель таблиц, ядро автоматически переводит такие значения в настроенную у пользователя временную зону. В качестве эксперимента можно попробовать вывести в инфолог значение такого поля без присваивания его промежуточной переменной и убедиться, что никаких +3 часов там не будет.
|
|
12.10.2011, 11:51 | #14 |
Участник
|
X++: while select sysUserLogCreate where sysUserLogCreate.createdDateTime > dateFrom && sysUserLogCreate.createdDateTime < dateTo {. . . Теперь смотрим через обозреватель таблиц ту же запись, там совсем другое время, меня интересует при таком преобразовании насколько будет верным сравнение в вышеуказанном коде (2 вложение) |
|
12.10.2011, 12:23 | #15 |
Участник
|
Цитата:
Обозреватель таблиц с т.з. ядра - тоже форма... Отладчик же при отображении данных типа UtcDateTime всегда показывает их "как есть". |
|
12.10.2011, 13:29 | #16 |
Участник
|
Понятно спасибо, я думал обозреватель таблиц показывает "как есть".
|
|