2012-08-08 87 views
-1

我想返回一个常量字符串值恒说计算基于当前时间

“A”如果当前的时间跨度下降between 06:00 – 14:00

“B”如果当前时间落在between 14:00 – 22:00。如果两种情况均不满意,则应返回“C”

请提出实现此目的的最佳方法。

+0

您无法确定TimeSpan的“何时”。 TimeSpan是一个时间间隔,与当前时间无关。 – 2012-08-08 06:19:44

+0

如果该值不属于两个范围,会返回什么? – 2012-08-08 06:20:03

+0

先说'int h = DateTime.Now.Hour;'。那么如果'h'大于或等于'6'并且小于'14',则取''A''。等等。 – 2012-08-08 06:47:21

回答

1

试试这个:如果时间是14:01

static string GetValue(DateTime date) 
{ 
    var time = date.TimeOfDay; 
    if (time.TotalHours >= 6 && time.TotalHours < 14) 
    { 
     return "A"; 
    } 

    if (time.TotalHours >= 14 && time.TotalHours < 22) 
    { 
     return "B"; 
    } 

    return null; 
} 

此代码将返回 “B”。

+0

然后,你的最右边的不平等应该从'<='改变为'<'。 – 2012-08-08 06:45:24

+0

@JeppeStigNielsen:同意。 – Dan 2012-08-08 06:47:10

0

[DateTime。]小时属性的值总是使用24小时制的 时钟表示。 MSDN

但是好了,你的约会的类型必须为DateTime,不TimeSpan的。

+0

did you mean to make an link for'DateTime' text? – Default 2012-08-08 06:56:31

+0

不,我刚刚添加了DateTime这个词,因为MSDN页面上没有这个词。如果没有这个,这将会令人困惑。我认为这是正确的引用技术,不是吗? – 2012-08-08 06:59:29

+0

哦,这是来自MSDN的引用。我没有得到那 – Default 2012-08-08 07:03:29

-1
if (DateTime.Now.Hour >= 6 && DateTime.Now.Hour <= 14) 
    return "A"; 
else if (DateTime.Now.Hour >= 14 && DateTime.Now.Hour <= 22) 
    return "B"; 
+1

这是行不通的,因为如果时间是14:01,就会返回“A”。在这种情况下,应该返回“B”,但不是。 – Dan 2012-08-08 06:29:19

+1

不要四次调用'.Now'获得者。代码运行时,“Now”可能会更改。 – 2012-08-08 06:40:00