I still think NodaTime is the best library for dealing with complex time situations. But, I had to do something very simple - ask the user what time zone a given event would take place in. It turns out that Noda Time, which uses Olson (like everyone else except Microsoft), has no real good way to do this (see here and here). There are basically way too many Olson TzIds and it’s very confusing for users to select from. Noda Time plans to solve this in 2.0 using a mapping between CLDR and Olson. Actually, they planned to solve it in 1.3, but 1.3 is now out and it’s moved to the 2.0 roadmap.
In the meantime, .NET’s TimeZoneInfo does a great job of giving me values for a human-decipherable drop down, so I am going to have to use that for now and rely on mapping between Microsoft and Olson time zones if my problems become more complex or Noda Time starts supporting this case. So, my first opportunity to use Noda Time results in me having to decide against it for now.