public void GetOccurrenceForYear_Defaults_Epoch() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, LocalTime.Midnight); var actual = offset.GetOccurrenceForYear(1970); var expected = new LocalDateTime(1970, 1, 1, 0, 0).ToLocalInstant(); Assert.AreEqual(expected, actual); }
internal ZoneRuleSet(List<ZoneRecurrence> rules, Offset standardOffset, int upperYear, ZoneYearOffset upperYearOffset) { this.rules = rules; this.StandardOffset = standardOffset; this.upperYear = upperYear; this.upperYearOffset = upperYearOffset; }
internal ZoneRuleSet(string name, Offset standardOffset, Offset savings, int upperYear, ZoneYearOffset upperYearOffset) { this.name = name; this.StandardOffset = standardOffset; this.fixedSavings = savings; this.upperYear = upperYear; this.upperYearOffset = upperYearOffset; }
public void WriteRead() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); var recurrence = new ZoneRecurrence("bob", Offset.Zero, yearOffset, 1971, 2009); var actual = new ZoneRule(recurrence, "D"); var expected = new ZoneRule(recurrence, "D"); Assert.AreEqual(expected, actual); }
public void Equality() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("bob", Offset.Zero, yearOffset, 1971, 2009); var actual = new RuleLine(recurrence, "D", null); var expected = new RuleLine(recurrence, "D", null); Assert.AreEqual(expected, actual); }
public void Next_BeforeFirstYear() { var januaryFirstMidnight = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("bob", Offset.Zero, januaryFirstMidnight, 1970, 1972); Transition? actual = recurrence.Next(Instant.MinValue, Offset.Zero, Offset.Zero); Transition? expected = new Transition(NodaConstants.UnixEpoch, Offset.Zero); Assert.AreEqual(expected, actual); }
public void Next_FirstYear() { var januaryFirstMidnight = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var recurrence = new ZoneRecurrence("bob", Offset.Zero, januaryFirstMidnight, 1970, 1972); Transition? actual = recurrence.Next(Instant.UnixEpoch, Offset.Zero, Offset.Zero); Transition? expected = new Transition(new Instant(Instant.UnixEpoch.Ticks + (1 * TicksPerStandardYear)), Offset.Zero, Offset.Zero); Assert.AreEqual(expected, actual); }
public void ParseDateTimeOfYear_missingOn_validForZone() { const string text = "Mar"; var tokens = Tokens.Tokenize(text); var actual = Parser.ParseDateTimeOfYear(tokens, false); var expected = new ZoneYearOffset(TransitionMode.Wall, 3, 1, 0, false, LocalTime.Midnight); Assert.AreEqual(expected, actual); }
public void PreviousOrSame_LastYear() { var januaryFirstMidnight = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("bob", Offset.Zero, januaryFirstMidnight, 1970, 1972); Transition? actual = recurrence.PreviousOrSame(Instant.FromUtc(1971, 1, 1, 0, 0) - Duration.Epsilon, Offset.Zero, Offset.Zero); Transition? expected = new Transition(NodaConstants.UnixEpoch, Offset.Zero); Assert.AreEqual(expected, actual); }
public void RenameAppend() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); var old = new ZoneRecurrence("bob", Offset.Zero, yearOffset, 1971, 2009); var actual = old.RenameAppend("-Summer"); var expected = new ZoneRecurrence("bob-Summer", Offset.Zero, yearOffset, 1971, 2009); Assert.AreEqual(expected, actual); }
public void PreviousOrSame_AfterLastYear() { var januaryFirstMidnight = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("bob", Offset.Zero, januaryFirstMidnight, 1970, 1972); Transition? actual = recurrence.PreviousOrSame(Instant.MaxValue, Offset.Zero, Offset.Zero); Transition? expected = new Transition(Instant.FromUtc(1972, 1, 1, 0, 0), Offset.Zero); Assert.AreEqual(expected, actual); }
public void ParseDateTimeOfYear_missingAt_validForZone() { const string text = "Mar lastSun"; var tokens = Tokens.Tokenize(text); var actual = Parser.ParseDateTimeOfYear(tokens, false); var expected = new ZoneYearOffset(TransitionMode.Wall, 3, -1, (int) IsoDayOfWeek.Sunday, false, LocalTime.Midnight); Assert.AreEqual(expected, actual); }
public void Next_BeyondLastYear_null() { var afterRecurrenceEnd = Instant.FromUtc(1980, 1, 1, 0, 0); var januaryFirstMidnight = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("bob", Offset.Zero, januaryFirstMidnight, 1970, 1972); Transition? actual = recurrence.Next(afterRecurrenceEnd, Offset.Zero, Offset.Zero); Transition? expected = null; Assert.AreEqual(expected, actual); }
public void FormatName_Slash_Daylight() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int) IsoDayOfWeek.Wednesday, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("ignored", Offset.FromHours(1), yearOffset, 1971, 2009); var rule = new RuleLine(recurrence, "!", null); var zone = GetZone("X/Y", Offset.FromHours(1)); var zoneRecurrence = rule.GetRecurrences(zone).Single(); Assert.AreEqual("Y", zoneRecurrence.Name); }
public void FormatName_PercentS() { // Note that the offset is irrelevant here - the "daylight saving indicator" is replaced either way. var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int) IsoDayOfWeek.Wednesday, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("ignored", Offset.Zero, yearOffset, 1971, 2009); var rule = new RuleLine(recurrence, "!", null); var zone = GetZone("X%sY", Offset.Zero); var zoneRecurrence = rule.GetRecurrences(zone).Single(); Assert.AreEqual("X!Y", zoneRecurrence.Name); }
public void FormatName_PercentZ() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int) IsoDayOfWeek.Wednesday, true, LocalTime.Midnight); var recurrence = new ZoneRecurrence("Rule", Offset.FromHoursAndMinutes(5, 30), yearOffset, 1971, 2009); var rule = new RuleLine(recurrence, "D", null); var zoneRecurrence = rule.GetRecurrences(GetZone("X%zY", Offset.Zero)).Single(); Assert.AreEqual("X+0530Y", zoneRecurrence.Name); zoneRecurrence = rule.GetRecurrences(GetZone("X%zY", Offset.FromHoursAndMinutes(0, 30))).Single(); Assert.AreEqual("X+06Y", zoneRecurrence.Name); zoneRecurrence = rule.GetRecurrences(GetZone("X%zY", Offset.FromHoursAndMinutes(-6, -30))).Single(); Assert.AreEqual("X-01Y", zoneRecurrence.Name); }
public void MakeInstant_Feb() { var offset = new ZoneYearOffset(TransitionMode.Utc, 2, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero); var expected = new Instant((32L - 1) * NodaConstants.TicksPerStandardDay); Assert.AreEqual(expected, actual); }
/// <summary> /// Sets the inclusive upper limit for where this rule set applies. /// </summary> /// <param name="year">The end year (inclusive).</param> /// <param name="yearOffset">The end point in the year (inclusive).</param> internal void SetUpperLimit(int year, ZoneYearOffset yearOffset) { upperYear = year; upperYearOffset = yearOffset; }
public void NextTwice_WednesdayForward() { ZoneYearOffset offset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); var actual = offset.MakeInstant(2006, Offset.Zero, Offset.Zero); // Nov 1 2006 long baseTicks = actual.Ticks; actual = offset.Next(actual, Offset.Zero, Offset.Zero); // Oct 31 2007 actual = offset.Next(actual, Offset.Zero, Offset.Zero); // Nov 5 2008 var expected = new Instant(baseTicks + TicksPerStandardYear + TicksPerLeapYear + (4 * NodaConstants.TicksPerStandardDay)); Assert.AreEqual(expected, actual); }
public void Previous_OneSecondAfterJanOne() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero) + Duration.One; actual = offset.Previous(actual, Offset.Zero, Offset.Zero); var expected = Instant.UnixEpoch; Assert.AreEqual(expected, actual); }
public void MakeInstant_Milliseconds() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Create(0, 0, 0, 1)); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero); var expected = new Instant((1L - 1) * NodaConstants.TicksPerStandardDay + NodaConstants.TicksPerMillisecond); Assert.AreEqual(expected, actual); }
public void MakeInstant_SavingOffsetIgnored_Epoch() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, twoHours, oneHour); var expected = Instant.UnixEpoch; Assert.AreEqual(expected, actual); }
public void Constructor_nullName_exception() { var yearOffset = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, LocalTime.Midnight); Assert.Throws(typeof(ArgumentNullException), () => new ZoneRecurrence(null, Offset.Zero, yearOffset, 1971, 2009), "Null name"); }
public void MakeInstant_SavingAndOffset() { var offset = new ZoneYearOffset(TransitionMode.Wall, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, twoHours, oneHour); var expected = new Instant((1L - 1) * NodaConstants.TicksPerStandardDay - (twoHours.TotalTicks + oneHour.TotalTicks)); Assert.AreEqual(expected, actual); }
public void Next_OneSecondBeforeJanOne() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero) - Duration.One; actual = offset.Next(actual, Offset.Zero, Offset.Zero); var expected = Instant.UnixEpoch; Assert.AreEqual(expected, actual); }
public void MakeInstant_WednesdayBackward() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 15, (int)DayOfWeek.Wednesday, false, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero); var expected = new Instant((14L - 1) * NodaConstants.TicksPerStandardDay); Assert.AreEqual(expected, actual); }
/// <summary> /// Initializes a new instance of the <see cref="ZoneLine" /> class. /// </summary> public ZoneLine(string name, Offset offset, string rules, string format, int untilYear, ZoneYearOffset untilYearOffset) { this.Name = name; this.StandardOffset = offset; this.Rules = rules; this.Format = format; this.UntilYear = untilYear; this.UntilYearOffset = untilYearOffset; }
public void Next_JanOne() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero); long baseTicks = actual.Ticks; actual = offset.Next(actual, Offset.Zero, Offset.Zero); var expected = new Instant(baseTicks + (1 * TicksPerStandardYear)); Assert.AreEqual(expected, actual); }
internal ZoneRuleSet(List <ZoneRecurrence> rules, Offset standardOffset, int upperYear, ZoneYearOffset upperYearOffset) { this.rules = rules; this.StandardOffset = standardOffset; this.upperYear = upperYear; this.upperYearOffset = upperYearOffset; }
public void NextTwice_Feb29_FourYears() { var offset = new ZoneYearOffset(TransitionMode.Utc, 2, 29, 0, true, Offset.Zero); var actual = offset.MakeInstant(1972, Offset.Zero, Offset.Zero); long baseTicks = actual.Ticks; actual = offset.Next(actual, Offset.Zero, Offset.Zero); actual = offset.Next(actual, Offset.Zero, Offset.Zero); var expected = new Instant(baseTicks + (2 * ((3 * TicksPerStandardYear) + TicksPerLeapYear))); Assert.AreEqual(expected, actual); }
public void IEquatable_Tests() { var value = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); var equalValue = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); var unequalValue = new ZoneYearOffset(TransitionMode.Utc, 9, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); TestHelper.TestEqualsClass(value, equalValue, unequalValue); TestHelper.TestOperatorEquality(value, equalValue, unequalValue); }
public void PreviousTwice_JanOne() { var offset = new ZoneYearOffset(TransitionMode.Utc, 1, 1, 0, true, Offset.Zero); var actual = offset.MakeInstant(1970, Offset.Zero, Offset.Zero); long baseTicks = actual.Ticks; actual = offset.Previous(actual, Offset.Zero, Offset.Zero); actual = offset.Previous(actual, Offset.Zero, Offset.Zero); var expected = new Instant(baseTicks - (TicksPerStandardYear + TicksPerLeapYear)); Assert.AreEqual(expected, actual); }
public void GetOccurrenceForYear_AtLeastFeb29th_NotLeapYear() { ZoneYearOffset offset = new ZoneYearOffset(TransitionMode.Utc, 2, 29, (int)IsoDayOfWeek.Sunday, true, LocalTime.Midnight); Assert.Throws <InvalidOperationException>(() => offset.GetOccurrenceForYear(2013)); }
public void Test() { var dio = new DtzIoHelper("ZoneYearOffset"); var expected = new ZoneYearOffset(TransitionMode.Utc, 10, 31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); dio.TestZoneYearOffset(expected); dio = new DtzIoHelper("ZoneYearOffset"); expected = new ZoneYearOffset(TransitionMode.Utc, 10, -31, (int)IsoDayOfWeek.Wednesday, true, Offset.Zero); dio.TestZoneYearOffset(expected); }
/// <summary> /// Adds a cutover for added rules. /// </summary> /// <remarks> /// A cutover is a point where the standard offset from GMT/UTC changed. This occurs mostly /// pre-1900. The standard offset at the cutover defaults to 0. /// Call <see cref="DateTimeZoneBuilder.SetStandardOffset"/> afterwards to change it. /// </remarks> /// <param name="year">The year of cutover.</param> /// <param name="yearOffset">The offset into the year of the cutover.</param> /// <returns>This <see cref="DateTimeZoneBuilder"/> for chaining.</returns> public DateTimeZoneBuilder AddCutover(int year, ZoneYearOffset yearOffset) { Preconditions.CheckNotNull(yearOffset, "yearOffset"); if (ruleSets.Count > 0) { LastRuleSet.SetUpperLimit(year, yearOffset); } AddEndOfTimeRuleSet(); return this; }
public void GetOccurrenceForYear_ExactlyFeb29th_NotLeapYear() { ZoneYearOffset offset = new ZoneYearOffset(TransitionMode.Utc, 2, 29, 0, false, LocalTime.Midnight); Assert.Throws <InvalidOperationException>(() => offset.GetOccurrenceForYear(2013)); }