c#的强制性日期时间问题-确定UtcNow是否只在给定的时间范围内

本文关键字:时间 范围内 是否 确定 日期 强制性 问题 UtcNow | 更新日期: 2023-09-27 18:08:45

我有一个情况,我需要设置一个重复出现的时间跨度(在这个例子中,6 PM - 6 AM是时间跨度)

Date与此无关。假定为每天一张支票。

我在如何做到这一点上有困难,因为使用DateTime.UtcNow确实给了我正确的时间,但它没有产生正确的日子。然而,使用DateTime.MinValue不能得到当前时间。而且我无法手动设置日期。我已经探索了其他关于堆栈溢出的帖子,我只是误解了一些东西,我想…但这是我目前微不足道的代码…

var start = DateTime.MinValue.Date.Add(new TimeSpan(18, 0, 0));
            var end = DateTime.MinValue.Date.Add(new TimeSpan(6, 0, 0));
            var timezone = TimeZone.CurrentTimeZone.GetUtcOffset(start);
            var now = DateTime.UtcNow;
            now.Date = DateTime.MinValue;
            // is right now greater than 6pm est?
            Console.WriteLine(start.TimeOfDay < now);
            Console.WriteLine(end < DateTime.UtcNow);
            Console.WriteLine(start.ToShortTimeString());
            Console.WriteLine(DateTime.UtcNow.TimeOfDay);
            Console.WriteLine(timezone.ToString());
            Console.ReadLine();

c#的强制性日期时间问题-确定UtcNow是否只在给定的时间范围内

我不确定你想达到什么目的,但是对于支票来说,这样的东西不会为你做吗?

DateTime dt3 = DateTime.UtcNow;
if(dt3.Hour <= 6 || dt3.Hour >=18)//24 hr format
   MessageBox.Show("6PM - 6AM range");// UTC will have only one time and should get satisfied irrespective of date

要检查它是否在午夜UTC和6AM UTC之间或6PM UTC和午夜UTC之间的第二天,你将不得不结合两个子句:

bool IsNowInTimeSpan = (DateTime.UtcNow >= DateTime.Date && DateTime.UtcNow <= DateTime.Date.AddHours(6)) ||
                       (DateTime.UtcNow >= DateTime.Date.AddHours(18) && DateTime.UtcNow <= DateTime.Date.AddDays(1));