C#如何检查TimeOfDay是否等于指定的字符串时间

时间:2015-11-09 18:37:19

标签: c# windows-services

基本上,我正在开发一个Windows服务,我问的是计算机:如果它是xx:xx:xx.xxx那么就做点什么。

不幸的是我无法将它与System.TimeSpan.Parse()进行比较:

timer = new Timer();
this.timer.Interval = 100;
if ((DateTime.Now.TimeOfDay == System.TimeSpan.Parse("02:30:00"))) //24-Hour
{
    //do something
    this.timer.Enabled = true;
}

此外,有没有办法在满足条件的情况下保持服务的监控,并且在没有计时器的情况下执行if-block中的代码?或者你真的需要计时器吗?

4 个答案:

答案 0 :(得分:1)

你很少会在零毫秒的时间内以100毫秒的定时器间隔排队。这将导致您的比较失败。在比较的左侧尝试[DateTime]::Now.AddMilliseconds(0 - [DateTime]::Now.Millisecond).TimeOfDay

另外,您是否考虑过将此作为Windows控制台应用程序并使用Windows计划任务解雇?有时,这比写一项服务更好。

答案 1 :(得分:0)

  
    

您可以使用Quartz.NET库,这是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。它非常有用且易于使用。

  

Here你可以得到一些关于此的教程。

您可以通过定义非常灵活的cron表达式来指定所需的计划。

Here是一些文档。

答案 2 :(得分:0)

如果您说02:30:00是24格式的时间,例如HH:mm:ss

你可以使用

if("02:30:00".Equals(DateTime.Now.ToString("HH:mm:ss"))
{
// C# code goes here if both matchs
}

<强>更新

  

DateTime.Now.ToString(&#34; HH:MM:SS&#34)

这将仅返回小时:分钟:秒

答案 3 :(得分:0)

谢谢大家的回答。但是,我决定进行远程比较。

def generate_configurations(configurations, named_positions, current):
    if len(current) == len(named_positions):
        configurations.append(current)
        return configurations

    name, positions = named_positions[len(current)]
    for x in positions:
        if x not in current:
            generate_configurations(configurations, named_positions, current + (x,))

    return configurations