Тема: UtcDateTime
Показать сообщение отдельно
Старый 04.08.2011, 19:33   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
В RU7 срабатывает так
X++:
while select tmpShtrihMTable
        where tmpShtrihMTable.TransDateTime != datetobeginUtcDateTime(_transDate, DateTimeUtil::getUserPreferredTimeZone())
        order by TransDateTime
    {
По-моему, это неверно. Эти два выражения отнюдь не тождественны:
X++:
DateTimeUtil::date(tmpShtrihMTable.TransDateTime) != _transDate
и
X++:
tmpShtrihMTable.TransDateTime != datetobeginUtcDateTime(_transDate, DateTimeUtil::getUserPreferredTimeZone())
Первое выражение будет ложно для интервала в сутки, второе - для интервала в одну секунду.
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Вобщем, нужен аналог следующей конструкции:

X++:
    while select tmpShtrihMTable
        order by TransDateTime
    {
        if (DateTimeUtil::date(tmpShtrihMTable.TransDateTime) != _transDate) // _transDate нужная дата
            continue;
В поля типа UtcDateTime пишется дата-время по Гринвичу; по Гринвичу 2 ночи и 10 вечера одного дня - это одна и та же дата, в то время как, скажем, для Москвы эти же временные отметки будут относиться к разным датам, поэтому нужно определиться с тем, в какой временной зоне будет считаться TransDate. После того, как это станет ясно, можно будет фильтровать данные примерно так:
X++:
Timezone tz = // ...
while select tmpShtrihMTable
    where   tmpShtrihMTable.TransDateTime >= datetobeginUtcDateTime(_transDate, tz)
        &&  tmpShtrihMTable.TransDateTime <= datetoendUtcDateTime(_transDate, tz)