I'm trying to understand why my date is wrong:
DateTime databaseUtcTime = new DateTime(2016, 8, 15, 10, 20, 0, DateTimeKind.Utc);
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
var testDateTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, timeZone);
testDateTime = testDateTime.AddHours(-1);
The time zone with an ID of "Central Europe Standard Time" is just the one used by central Europe... it doesn't really mean standard time.
As central Europe is observing daylight savings at the moment, the offset really is UTC+2.
It's very unfortunate that the IDs used in Windows time zones are misleading like this... but the
TimeZoneInfo implementation itself is correct.
(This isn't all that's wrong with Windows time zone names... see Matt Johnson's post on the matter for more...)