检查当前时间是否给定时间

时间:2018-11-21 04:40:30

标签: c#

在我的主要方法中,我一直在检查给定时间是否等于当前时间。但是我的代码似乎失败了。这是Windows窗体应用程序,而不是控制台应用程序。不尝试将字符串转换为时间跨度,需要某种方式来检查两次是否相等。

static void Main()
{
    TimeSpan start = TimeSpan.Parse("10:09:00");
    while (true)
    {

        TimeSpan now = DateTime.Now.TimeOfDay;
        if (now == start)
        {
            Debug.WriteLine("Fount at " + now + " " + start);
            Environment.Exit(1);
        }
        Debug.WriteLine("Running Loop at " + now + " "+start);
    }
} 

我尝试将第一行更改为

TimeSpan start = TimeSpan.Parse("10:09:00:0000000");

这似乎也不起作用,有人可以建议我更好的方法吗?

3 个答案:

答案 0 :(得分:2)

您的代码无法正常工作,因为您比较了不同的时间跨度,并且当添加小数毫秒时,它们不太可能匹配。

您可以使用以下代码段来比较时间:

    TimeSpan start = new TimeSpan(11, 49, 0);
    while (true)
    {
        TimeSpan now = DateTime.Now.TimeOfDay;
        if (Math.Abs((now - start).TotalMilliseconds)<1000)
        {
            Debug.WriteLine("Found at " + now + " " + start);
            Environment.Exit(1);
        }
        Debug.WriteLine("Running Loop at " + now + " " + start);
    }

答案 1 :(得分:2)

您的问题可能是毫秒

您还可以使用扩展名进行修整,这样可以将时间截短到第二秒

public static class Extensions
{
    public static DateTime TrimMilliseconds(this DateTime dt)
    {
        return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, 0, dt.Kind);
    }
}

Full Demo Here

答案 2 :(得分:2)

您的“开始”值还可以,问题是TimeOfDay的精度要比分钟要高得多。您需要以某种方式将值截断到分钟。

这是一种您可以做到的方式:

var now = TimeSpan.FromSeconds(Math.Floor(DateTime.Now.TimeOfDay.TotalSeconds));

TotalSeconds将返回一个非整数值(即它将毫秒作为小数部分),因此我们采用该值,对其进行下限以删除小数部分,然后将其转换回秒-现在没有任何短于此的值一秒钟。

当然,您可以根据需要将“秒”切换为分钟,小时等。