在C#控制台应用程序

时间:2016-07-27 05:33:14

标签: c# datetime console

我正在尝试在用户定义的时间运行一段代码,但是datetime变量存储了我点击运行时的时间值,并且没有更新以检查时间是否已更改。

static void Main(string[] args)
      {
          Console.WriteLine("please enter the date in m/d/y h/m/s am/pm     format ");
          DateTime bombDate = Convert.ToDateTime(Console.ReadLine());
          repeat:
          //DateTime bombDate = "7/27/2016 4:13:16 AM";

          DateTime now = DateTime.Now;
              if (bombDate == now)
              {
                  string _str = " this is a virus, you have been hit by a logic bomb  ...";
                  while (true)
                  {
                      foreach (char c in _str)
                      {
                          SendKeys.SendWait(c.ToString());
                          Thread.Sleep(200);


                      }
                        Thread.Sleep(3000);
                  }

              }

              else {
                  goto repeat;
              }

2 个答案:

答案 0 :(得分:0)

您无法准确匹配这两个日期,您要比较此处的标记以及两个日期恰好同时执行的机会Now匹配日期不是那么高。由于您只是从输入中指定秒数,因此请使用:

if ((bombDate - now).TotalSeconds < 0)

这匹配两个日期,即使它已经过了不到1秒。

或者你可以检查是否已经过了所需的时间:

if ((bombDate <= now))

答案 1 :(得分:0)

我会将此作为评论发布,但我不能。

根据您尝试做的事情,可能值得考虑编写程序并使用像Windows任务调度程序这样的标准工具来实际在特定条件/时间运行它。

另外goto很多人都皱起了眉头,这是有充分理由的。基本上你是在创造一个循环。为什么不这样宣布呢?一种可能性是使用一个只计算时间的循环(这基本上就是你在外循环中所做的)。

DateTime now = NULL;
while(bombDate != now){
    now = DateTime.Now;
}
// Other Code beginning with string _str =

在规避时间问题的方法是在初始分配之后/循环之前添加另一个睡眠。这样你就可以确定在DateTime.Now的连续调用之间经过了一段时间。寻求像user3185569建议的更好的分辨率可能会更好。