让事情在某个时间框架内发生

时间:2018-03-08 06:35:19

标签: c#

我正在尝试制作一个节目,凌晨4点之后它说“早上好”,中午12点之后它说“早上好,先生”。 (我会在晚上添加,我只是想先把它钉上去)我做了一个if语句来比较像这样的时间

DateTime t1 = DateTime.Now;
DateTime t2 = new DateTime(4);
DateTime t3 = new DateTime(12);
DateTime.Compare(t1, t2);
DateTime.Compare(t1, t3);
if (t1 >= t2)
{
    s.Speak("good morning sir");
}
if (t1 >= t3)
{                 
      s.Speak("good afternoon sir");
}

问题在于,当我运行时,它表示早上好,下午好。我是如何做到这一点所以它只说早上4点之后的早上好,中午12点之后的下午好。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

为什么不将Hour DateTime.Now属性与数字而不是其他DateTime进行比较?

var now = DateTime.Now;
if (now.Hour >= 4 && now.Hour < 12) {
    Console.WriteLine("Good morning");
} else if (now.Hour >= 12) {
    Console.WriteLine("Good afternoon");
}

您的代码不正确,因为带有1个参数的DateTime构造函数将创建一个DateTime,其中包含许多 ticks ,而不是小时。要创建具有特定小时的DateTime,您可以使用此构造函数:

new DateTime(2018, 3, 8, 6, 45, 0);
                         ^
                         |
                       hour

如果您使用的是NodaTime,则可以创建2个LocalTime个实例,并将它们进行比较:

var now = SystemClock.Instance.Now.InZone(DateTimeZoneProviders.Bcl.GetSystemDefault()).TimeOfDay;
var four = new LocalTime(4, 0);
var noon = LocalTime.Noon;
if (now >= four && now < noon) {
    Console.WriteLine("Good morning");
} else if (now >= noon) {
    Console.WriteLine("Good afternoon");
}

答案 1 :(得分:0)

你可以做到

if(DateTime.Now.Hour >= 4)
{
    ....
}
else if(DateTime.Now.Hour >= 12)
{
    ....
}

答案 2 :(得分:0)

实际上比较早上或下午的时间比较好:

https://dotnetfiddle.net/jcFN0c

using System;

public class Program
{
    public static void Main()
    {   
        SayHello(DateTime.Now);
        SayHello(DateTime.Now.AddHours(6));
    }

    private static void SayHello(DateTime time)
    {
        if (time.Hour >= 4 && time.Hour < 12)
        {
            Console.WriteLine(String.Format("good morning sir. It's {0} o'clock right now.", time));
        }
        else
        {                 
             Console.WriteLine(String.Format("good afternoon sir. It's {0} o'clock right now.", time));
        }       
    }

}