Я получаю неожиданный DateTime при преобразовании из:Неправильное время использования TimeZoneInfo.ConvertTime()
(UTC) Dublin, Edinburgh, Lisbon, London
в (UTC-08:00) Baja California
Ниже приведен код, который я использую. Я ожидаю, что serverDateTime
будет 29/03/2016 00:00:01
(-8 часов), но вместо этого я получаю 28/03/2016 23:00:01
- это разница в 9 часов.
private static void Main(string[] args)
{
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
TimeZoneInfo localTimeZone = timeZones.FirstOrDefault(tz => tz.DisplayName.Contains("London"));
TimeZoneInfo serverTimeZone = timeZones.FirstOrDefault(tz => tz.DisplayName.Contains("California"));
DateTime clientDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 29, 8, 0, 1);
DateTime serverDateTime = TimeZoneInfo.ConvertTime(clientDateTime, localTimeZone, serverTimeZone);
}
Моей локальная машина находится в Великобритании, которая в настоящее время UTC + 1, и Baja - Калифорния в настоящее время UTC-7, поэтому я ожидаю, чтобы получить 8-часовую разницу в, вместо 9. Что я Я делаю неправильно?
Заранее спасибо.
Это * не * UTC (+00: 00), это просто часовой пояс Лондона, который уже использует DST (+1: 00). Я буду держать пари, что правила DST отличаются в Калифорнии. –
BTW это * далеко * проще использовать NodaTime для работы со временем. Там * есть * Часовой пояс Windows, который соответствует UTC, но я еще не нашел нужный индекс. –
Почему вы конвертируете время? Время конвертирования в большинстве случаев не требуется. Только время, которое действительно необходимо, - это когда вы вводите данные, которые были собраны в другой часовой пояс. Все компьютеры хранят время в UTC и по умолчанию используют настройки часового пояса при вводе и отображении времени. Преобразование времени может закончиться временем, которое не является UTC. – jdweng