Is there a generic TimeZoneInfo for Central Europe that takes into consideration both CET and CEST into one?
I have an app that is doing the following:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset);
var utcDate = dto.ToUniversalTime().DateTime;
The problem is that this is returning the wrong utcDate because the BaseUtcOffset is +1 instead of +2. It appears that CET has DST as well and depending on the time of the year it is +1 or +2.
Firstly, I’d like to applaud mgnoonan’s answer of using Noda Time 🙂 But if you’re feeling less adventurous…
You’re already using the right time zone – but you shouldn’t be using
BaseUtcOffsetwhich is documented not to be about DST:It can’t possibly take DST into consideration when you’re not providing it a
DateTimeto fetch the offset for 🙂Assuming
someDateis aDateTime, you could use:Or just
ConvertTimeToUtc:Note that you should work out what you want to do if your local time occurs twice due to a DST transition, or doesn’t occur at all.