преобразовать строку, которая представляет время в тихоокеанском часовом поясе, что я использую для создания DateTime
объекта:TimeZoneInfo.ConvertTime из PST в формате UTC к AEST - на один час
var pacificDateTime = new DateTime(2016, 11, 16, 15, 0, 0) // 11/16/2016 3:00:00 PM
Используя это, я создайте DateTimeOffset
, потому что в конечном итоге с ним становится немного легче работать.
var pacificTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var dateTimeNoKind = new DateTime(pacificDateTime.Ticks, DateTimeKind.Unspecified)
var DateTimeOffsetValue = TimeZoneInfo.ConverTimeToUtc(dateTimeNoKind, pacificTimeZoneInfo) // 11/16/2016 11:00:00 PM
Пока все хорошо. Разница между UTC и Pacific заключается в том, что UTC впереди на 8 часов (данное время находится в пределах дневного сбережения).
Тогда я хочу, чтобы преобразовать из UTC в AEST, но это, где появляется проблема:
var australianEasternTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
TimeZoneInfo.ConvertTime(DateTimeOffsetValue, australianEasternTimeZoneInfo) // 11/17/2016 10:00:00 AM
AEST опережает UTC на 10 часов. Я ожидал, что значение будет 11/17/2016 09:00:00 AM
, но вместо этого я получаю дополнительный час, добавленный к моему результату.
В качестве теста, когда я конвертирую в PST или GMT или EST со времени UTC, они, похоже, обращаются обратно правильно.
Я чувствую, что мне не хватает чего-то очевидного или чего-то простенького?
AEST в настоящее время UTC + 11, а не UTC + 10. У нас есть дневные сбережения. 'TimeZoneInfo.FindSystemTimeZoneById (« Восточное стандартное время AUS »). IsDaylightSavingTime (DateTime.UtcNow)' – Rob
@Rob на самом деле AEST всегда UTC + 10, это просто Австралия в настоящее время не соблюдает это, а AEDT. – zerkms
@zerkms Вы правы - это различие, которое я забыл. Тем не менее, '' Восточное стандартное время AUS '' отображается внутри одной зоны с «DaylightName» и «StandardName» – Rob