Чтобы освоить преобразование из одного часового пояса в другой, вам нужно посмотреть, что поддерживается (как?), а что нет.
foreach (var tz in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine("TimeZone Offset: {0} Name : {1}, Supports DLS: {2}", tz.BaseUtcOffset,tz.StandardName,tz.SupportsDaylightSavingTime);
}
Это должно дать вам список всех часовых поясов, включая информацию о DayLightSaving. Заметь:
Смещение часового пояса: 00:00:00 Имя: стандартное время по Гринвичу, поддерживает DLS: False
Смещение часового пояса: 00:00:00 Имя: стандартное время по Гринвичу, поддерживает DLS: True
Поэтому вам нужно использовать «Стандартное время по Гринвичу», потому что оно уже поддерживает переход на летнее время. Никакой работы не нужно делать.
Вот пример кода:
private static string GetBSTTimeStamp(string timestamp)
{
DateTime dt = DateTime.Parse(timestamp);
//TimeZoneInfo bst = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
//Console.WriteLine("Time zone supports dls? {0}", bst.SupportsDaylightSavingTime);
//Console.WriteLine("Time zone offset? {0}", bst.BaseUtcOffset);
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dt, "Eastern Standard Time", "GMT Standard Time");
return dateTimeInUtc.ToString();
}
person
Taky Djarou
schedule
08.09.2016
info
. Таким образом, вашoff
будет смещением текущего часового пояса. - person Soner Gönül   schedule 22.10.2014info
инициализируется, но в остальном не используется. Возвращаемое смещение основано только наDateTimeOffset.Now
. - person   schedule 22.10.2014DateTimeOffset.Now.Offset.TotalMinutes
возвращает 60 для меня в Великобритании прямо сейчас. - person Ben Robinson   schedule 22.10.2014