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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2014, 09:31   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
ToUniversalTime и перевод часов на летнее/зимнее время
Здравствуйте. Подскажите, пожалуйста, как в .NET отключить учет перевода часов на летнее/зимнее время, чтобы код выдавал одинаковый сдвиг?

X++:
    System.DateTime     dateTime1;
    System.DateTime     dateTime2;
    ;

    dateTime1 = System.DateTime::Parse("05.12.2014 00:00:00");  // сегодня
    dateTime1 = dateTime1.ToUniversalTime();
    
    dateTime2 = System.DateTime::Parse("05.05.2015 00:00:00");  // май
    dateTime2 = dateTime2.ToUniversalTime();
    
    info(dateTime1.ToString());
    info(dateTime2.ToString());
    
    /*
    Info    Сообщение (14:42:51)    04.12.2014 21:00:00
    Info    Сообщение (14:42:51)    04.05.2014 20:00:00
    */
Старый 08.12.2014, 10:03   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Можно явно указать во входной строке желаемый сдвиг относительно GMT, см. DateTime.Parse Method
Старый 08.12.2014, 10:06   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
К сожалению, не годится. То, что во входной строке, это указывается пользователем. То есть он не должен думать, какой там сдвиг указать. Опять же бывают ситуации, когда вводится только дата. Тогда время подразумевается нулевым. А то, что в получается в результате конвертации, это время по гринвичу (пишется в базу, например)
Старый 08.12.2014, 10:11   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Попробуйте этот метод -

TimeZoneInfo.ConvertTimeToUtc Method (DateTime)

DateTime.ToUniversalTime использует текущее правило, а не то которое действовало на дату в DateTime.

С MSDN (см. "Note")-

Цитата:
If the current computer's local time zone includes multiple adjustment rules, this overload of the ConvertTimeToUtc method can return results that differ from the TimeZone.ToUniversalTime and DateTime.ToUniversalTime methods. TimeZone.ToUniversalTime always applies the current adjustment rule to time zone conversion, whether or not dateTime lies within its date range. And when executing on .NET Framework 3.5, DateTime.ToUniversalTime also applies the current adjustment rule to time zone conversion, whether or not dateTime lies within its date range.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 08.12.2014, 10:12   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
К сожалению, не годится. То, что во входной строке, это указывается пользователем.
Вот это и есть главная проблема.
Пользователь вам такого г. там навводит, что потом намучаетесь.
Если пользователь вводить данные надо его ограничить, а потом сами в эту строчку можете что угодно добавить (инфу о зоне и.т.п.)
Старый 08.12.2014, 12:30   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
X++:
    System.DateTime     dateTime1;
    System.DateTime     dateTime2;
    System.DateTime     dateTime3;
    ;

    dateTime1 = System.DateTime::Parse("05.12.2014 00:00:00");  // сегодня
    dateTime1 = System.TimeZoneInfo::ConvertTimeToUtc(dateTime1);

    dateTime2 = System.DateTime::Parse("05.05.2014 00:00:00");  // май текущего года
    dateTime2 = System.TimeZoneInfo::ConvertTimeToUtc(dateTime2);

    dateTime3 = System.DateTime::Parse("05.05.2015 00:00:00");  // май следующего года
    dateTime3 = System.TimeZoneInfo::ConvertTimeToUtc(dateTime3);

    info(dateTime1.ToString());
    info(dateTime2.ToString());
    info(dateTime3.ToString());

    /*
    Info    Сообщение (12:29:13)    04.12.2014 21:00:00
    Info    Сообщение (12:29:13)    04.05.2014 20:00:00
    Info    Сообщение (12:29:13)    04.05.2015 21:00:00
    */
почему май текущего года выдает некорректный сдвиг?
Старый 08.12.2014, 12:33   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Мне кажется он как раз корректный.
На тот момент действовал сдвиг на 4 часа. Старое летнее время.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Y2K11 или переход на зимнее время Wamr DAX: Администрирование 134 15.03.2024 17:42
Фактические дата и время в пакетном задании АХ2009 asd1274 DAX: Функционал 2 24.04.2013 16:56
DAX2009 зафиксировать дату и время сеанса Raven Melancholic DAX: Функционал 3 25.04.2011 16:26
Время по графику и фактическое время работы в табеле nicko DAX: Функционал 0 09.02.2005 15:24
Установить время файла? SnowMan DAX: Программирование 5 01.10.2003 14:42
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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