Исключение на ConvertTimeToUtc - PullRequest
3 голосов
/ 19 июля 2010

Здравствуйте, у меня есть исключение при преобразовании местного времени в UTC.Я запускаю свое приложение в Windows, где установлено «Русское стандартное время».

public Convert()
{
            DateTime dt = DateTime.Now;
            DateTime dt1 = DateTime.Now;

           // this converstion works
            TimeZoneInfo.ConvertTimeToUtc(dt, TimeZoneInfo.Local);

            // now let's get local timezone by id
            TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");

            if (TimeZoneInfo.Local.Id == tz.Id)
            {
                // this is just to make sure we have the same timezones
            }

// this conversion does not work
// throws exception System.ArgumentException
TimeZoneInfo.ConvertTimeToUtc(dt1, tz);

}

ОБНОВЛЕНИЕ

В тексте исключения указано, что невозможно завершить скрытие, поскольку свойство Kind даты и времени неверно.Например, если Kind is Local, у часового пояса должно быть значение TimeZoneInfo.Local.

Извините, это не копия, оригинал сообщения не на английском языке.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Метод TimeZoneInfo.Equals не только сравнивает Id: он также проверяет, что два часовых пояса имеют одинаковые правила настройки (TimeZoneInfo.HasSameRules) - это можно увидеть с помощью Reflector.

Я подозреваю, что местный часовой пояс фактически использует летнее время, тогда как TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time") возвращает часовой пояс без летнего времени.

Вы можете легко проверить это с помощью отладчика.

1 голос
/ 19 июля 2010

msdn говорит:

ArgumentException
dateTime.Kind - это DateTimeKind.Utc, а sourceTimeZone не равно TimeZoneInfo.Utc.
-или-
dateTime.Kind - это DateTimeKind.Local, а sourceTimeZone не равно TimeZoneInfo.Local.

и это, похоже, проблема. DateTime.Now возвращает DateTimeKind.Local .
Но использование DateTime.SpecifyKind () работает для меня:

dt1 = DateTime.SpecifyKind( dt, DateTimeKind.Unspecified );
TimeZoneInfo.ConvertTimeToUtc( dt1, tz );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...