public void TestGetFivePmYesterday() { ITimeProvider timeProvider = new ManualTimeProvider(); TimeZoneInfo easternTz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); // used to run check on the time DateTimeOffset dt = DateTimeUtils.GetFivePmYesterday(timeProvider); Assert.IsNotNull(dt); // Test for edge case: between 12am and 5am local time timeProvider.SetCurrentTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 1, TimeSpan.FromHours(8), 0, 0); dt = DateTimeUtils.GetFivePmYesterday(timeProvider); Assert.IsTrue(dt.Date == timeProvider.Today().AddDays(-1).Date, "Testing GetFivePmYesterday with current time set to 1am: expect 5pm date to be on the previous HKT date"); if (easternTz.IsDaylightSavingTime(timeProvider.Now())) { Assert.IsTrue(dt.Hour == 5, "Currently EDT. Expect 5pm EDT = 5am HKT"); } else { Assert.IsTrue(dt.Hour == 6, "Currently EDT. Expect 5pm EDT = 5am HKT"); } // Test for between 5am to 11:59pm local time timeProvider.SetCurrentTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 13, TimeSpan.FromHours(8), 0, 0); dt = DateTimeUtils.GetFivePmYesterday(timeProvider); Assert.IsTrue(dt.Date == timeProvider.Today().Date, "Testing GetFivePmYesterday with current time set to 1pm: expect 5pm date to be on the current HKT date"); if (easternTz.IsDaylightSavingTime(timeProvider.Now())) { Assert.IsTrue(dt.Hour == 5, "Currently EDT. Expect 5pm EDT = 5am HKT"); } else { Assert.IsTrue(dt.Hour == 6, "Currently EDT. Expect 5pm EDT = 5am HKT"); } // Test in winter (Dec 15th) timeProvider.SetCurrentTime(DateTime.Now.Year, 12, 15, 13, TimeSpan.FromHours(8), 0, 0); dt = DateTimeUtils.GetFivePmYesterday(timeProvider); Assert.IsTrue(dt.Hour == 6, "Currently EDT. Expect 5pm EDT = 5am HKT"); // Test in summer (June 15th) timeProvider.SetCurrentTime(DateTime.Now.Year, 6, 15, 13, TimeSpan.FromHours(8), 0, 0); dt = DateTimeUtils.GetFivePmYesterday(timeProvider); Assert.IsTrue(dt.Hour == 5, "Currently EDT. Expect 5pm EDT = 5am HKT"); }