예제 #1
0
        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");
        }