public void CanLookupLocalTimeZoneById() { // Note that this test can fail legitimately, as there are valid situations where TimeZoneInfo.Local returns // a time zone that is not one of the system time zones. These are unlikely to be cases that we encounter // in practice, though. // However, there _are_ cases where we can't fetch the local timezone at all (sigh, Mono), so we'll have to // skip this test then. TimeZoneInfo local = null; try { local = TimeZoneInfo.Local; } catch (TimeZoneNotFoundException) { // See https://bugzilla.xamarin.com/show_bug.cgi?id=11817 Assert.Ignore("Test requires ability to fetch BCL local time zone"); } if (local == null) { // https://github.com/nodatime/nodatime/issues/235#issuecomment-80932079 Assert.Ignore("Test requires ability to fetch BCL local time zone (was null)"); } // Now that we have our BCL local time zone, we should be able to look it up in the source. var source = new BclDateTimeZoneSource(); string id = source.MapTimeZoneId(local); // in this case, just returns the Id, but required in general. // These lines replicate how DateTimeZoneCache implements GetSystemDefault(). Assert.Contains(id, source.GetIds().ToList(), "BCL local time zone ID should be included in the source ID list"); var zone = source.ForId(id); Assert.IsNotNull(zone); // though really we only need to test that the call above didn't throw. }
public void AllZonesMapToTheirId() { BclDateTimeZoneSource source = new BclDateTimeZoneSource(); foreach (var zone in TimeZoneInfo.GetSystemTimeZones()) { Assert.AreEqual(zone.Id, source.MapTimeZoneId(zone)); } }