Есть несколько часовых поясов, которые переключаются на DayLight и не экономят время. Я знаю, что Россия не переключается на это время, и Украина переключается на DayLight, экономя время.
Как я знаю по этой ссылке .NET TimeZoneInfo из часового пояса Олсона Москва использует стандартное российское время, а Киев (Украина) использует стандартное время FLE.
Мой тест:
Зима, Россия, DateTimeKind.Utc
Зима, Россия, DateTimeKind.Local
Лето, Россия, DateTimeKind.Utc
Лето, Россия, DateTimeKind.Local
Зима, Киев, DateTimeKind.Utc
Зима, Киев, DateTimeKind.Local
Лето, Киев, DateTimeKind.Utc
Лето, Киев, DateTimeKind.Local
Время моего ПК (UTC + 00: 00) Лондон + 1 час (сейчас время перехода на летнее время).
В своих тестах я использовал время 15:00.
Пусть это будет переменная dst = 1 час (для моего локального времени, сэкономленного на DayLight), я хочу понять, почему я получаю этот ответ:
- В России UTC + 3, поэтому 15:00 + 3 = 18:00
- В России UTC + 3, поэтому 15:00 по местному + 3 = 18:00 (dst * 0, поскольку зима)
- В России UTC + 3, поэтому 15:00 + 3 = 18:00
- Почему 17:00 ??? (как рассчитывается?)
- В Киеве UTC + 2, поэтому 15:00 + 2 = 17:00
- В Киеве UTC + 2, поэтому 15:00 по местному + 2 = 17: 00
- Почему это 18:00 ??? (как рассчитывается?)
- Почему 17:00 ??? (как рассчитывается?)
Windows 7
Часовой пояс: (UTC + 00: 00) Дублин, Эдинбург, Лиссабон, Лондон.
Культура: Великобритания
DateTime time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);