This problem occurs in the following time zones:
- (UTC-04:30) Caracas
- (UTC+01:00) Windhoek
- (UTC+02:00) Kaliningrad (RTZ 1)
- (UTC+02:00) Tripoli
- (UTC+03:00) Minsk
- (UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)
- (UTC+05:00) Ekaterinburg (RTZ 4)
- (UTC+06:00) Novosibirsk (RTZ 5)
- (UTC+07:00) Krasnoyarsk (RTZ 6)
- (UTC+08:00) Irkutsk (RTZ 7)
- (UTC+09:00) Yakutsk (RTZ 8)
- (UTC+10:00) Magadan
- (UTC+10:00) Vladivostok, Magadan (RTZ 9)
- (UTC+13:00) Samoa
This problem was exposed by the recent changes to Russian time zones that are described in Microsoft Knowledge Base article 2998527.
The .NET Framework previously ignored the UTC offset that is set in an internal adjustment rule. Instead, it used the base UTC offset in certain calculations. The .NET Framework also ignored adjustment rules that do not have daylight transitions.
We recommend that you install both update 2998527 and the new update, when it is available. This will make sure that UTC offset rules are used correctly for all past years and all years going forward.
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(2013, 6, 1), tz);