我如何检查当前时间是否正好是下午12:03

时间:2016-10-16 08:09:46

标签: c#

我需要检查当前时间是否正好是下午12:03才能执行某项任务。

这就是我想要实现它的方式。

TimeSpan start = TimeSpan.Parse("12:03"); 
TimeSpan now = DateTime.Now.TimeOfDay;

if (start == now)
    return true;
else
    return false;

问题: Start设置为{12:03:00}

Now设置为{12:03:01.8493604}并提供其他信息。

我怎么做这个比较? 任何想法

3 个答案:

答案 0 :(得分:-1)

我认为您只需要比较DateTime的小时和分钟组件:

var time = new DateTime(2016, 10, 16, 12, 3, 0);
var now = DateTime.Now;
if (time.Hour == now.Hour && time.Minute == now.Minute) {
    Console.WriteLine("Yeah");    
} else {
    Console.WriteLine("no");
}

几乎不可能让系统时钟正好在12:03。而且我认为您不希望代码仅在完全 12:03时运行。最有可能的是,您希望代码在12:03:00到12:03:59之间运行。

答案 1 :(得分:-1)

试试此代码

DateTime start = DateTime.ParseExact("12:03", "hh:mm", CultureInfo.InvariantCulture);
DateTime end = DateTime.ParseExact(DateTime.Now.ToString("hh:mm"), "hh:mm", CultureInfo.InvariantCulture);

var n = DateTime.Compare(start, end);
TimeSpan now = DateTime.Now.TimeOfDay;

if (n == 0)
    return true;
else
    return false;

答案 2 :(得分:-1)

您可以减去TimeSpans,它可以显示两个DateTimes(或者TimeSpans)之间的区别。一旦你有所不同,你可以使用TotalSeconds(或其他类似的命名属性之一,如TotalHours,TotalDays)来建立该时间窗口上的任何逻辑。

TimeSpan start = TimeSpan.Parse("15:09"); 
TimeSpan now = DateTime.Now.TimeOfDay;

Action<object> action = (s) => { Console.WriteLine(s); }; // what needs to be executed

// a 'negative' timespan means we're not there yet
TimeSpan diff = now - start;
// within the minute
if (diff.TotalSeconds > -1 && diff.TotalSeconds < 60) {
   action("awesome"); // execute
} 
else
{
    // if we are to early...
    if (diff.TotalSeconds<0) 
    {
        // ... schedule the work with a timer
        // waiting for the difference in the diff TimeSpan to pass
        new System.Threading.Timer((state) => action(state), // execute
            "FooBar",  // state
            diff.Duration(),  // how long to wait for the abolsute Duration 
            new TimeSpan(-1));  // no repeat
    }
    else
    {
        // we are late ...
    }
}

请记住,当从Timer调用逻辑时,代码在不同的线程上运行。确保您的代码可以处理,特别是与共享状态和/或UI交互。