我需要检查当前时间是否正好是下午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}
并提供其他信息。
我怎么做这个比较? 任何想法
答案 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交互。