DateTime cast / magic

时间:2010-09-23 22:54:13

标签: c# datetime

在C#中编写这个逻辑有一个很简洁的方法吗?

if ((DateTime.Now >= "8:00 AM") && (DateTime.Now < 5:00 PM))
{// do something}

我正在制作一个演示应用程序,我想在工作日发生一些事情,但我不希望这个代码突出很多(很多演员=坏)。 (因为我希望我的演示内容更容易看到。

4 个答案:

答案 0 :(得分:11)

嗯,你可以这样做:

DateTime now = DateTime.Now;
if (now.Hour < 8 || now.Hour >= 17)

请注意,我通常更喜欢只使用DateTime.Now属性一次,将结果复制到如上所述的局部变量中 - 这样您就不会因为时间而变得奇怪在通话之间切换。这里不是问题,但可能在其他情况下。

如果你想以这种方式处理事情,另一种可能性就是使用DateTime.TimeOfDay。我认为上面的内容很简单。

编辑:史蒂文指出我改变了&amp;&amp;在你原来的逻辑中|| - 你的原始逻辑永远不会工作,因为它永远不会在早上8点之前之后。上述工作适用于“如果不在工作日” - 如果您想要“如果它在工作日”,您只需要:

DateTime now = DateTime.Now;
if (now.Hour >= 8 && now.Hour < 17)

答案 1 :(得分:4)

我认为你想要做的是这样的事情:

var now = DateTime.Now;
if (now.Hour >= 8 && now.Hour < 17)

答案 2 :(得分:1)

如果你想让它“漂亮”,你也可以使用扩展方法:

public static class DateTimeHelper
{
    public static DateTime Time(this string time)
    {
        DateTime theTime = DateTime.Parse(time);
        return theTime;
    }
}

...

   if (DateTime.Now < "8:00 AM".Time() && DateTime.Now > "5:00 PM".Time())
   {
        // do something
   }

答案 3 :(得分:0)

如果您可以使用正确格式为当前日期和开始/结束时间格式化字符串,则可以使用类似的内容。

DateTime now = DateTime.Now;
DateTime start = Convert.ToDateTime(now.Date.ToShortDateString() + " 8:00:00 AM");
DateTime end = Convert.ToDateTime(now.Date.ToShortDateString() + " 5:00:00 PM");
if (now >= start && now < end)
{

}

我仍然认为使用其他人发布的小时方法更清晰,但这是一种方法,可以提供类似于您提出问题的答案。