08.12.2014, 09:31 | #1 |
MCTS
|
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 |
Участник
|
Можно явно указать во входной строке желаемый сдвиг относительно GMT, см. DateTime.Parse Method
|
|
08.12.2014, 10:06 | #3 |
MCTS
|
К сожалению, не годится. То, что во входной строке, это указывается пользователем. То есть он не должен думать, какой там сдвиг указать. Опять же бывают ситуации, когда вводится только дата. Тогда время подразумевается нулевым. А то, что в получается в результате конвертации, это время по гринвичу (пишется в базу, например)
|
|
08.12.2014, 10:11 | #4 |
Участник
|
Попробуйте этот метод -
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 |
Участник
|
Цитата:
Пользователь вам такого г. там навводит, что потом намучаетесь. Если пользователь вводить данные надо его ограничить, а потом сами в эту строчку можете что угодно добавить (инфу о зоне и.т.п.) |
|
08.12.2014, 12:30 | #6 |
MCTS
|
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 |
Участник
|
Мне кажется он как раз корректный.
На тот момент действовал сдвиг на 4 часа. Старое летнее время. |
|