2017-08-29 71 views
0

我在这里有一个函数,如果当前时间在两个军事时间之间,则试图返回true。如果当前时间介于两个军事时间之间,则返回true?

这里的问题是找到21300700之间的时间有点棘手。 2130工作正常,但07002130之前,所以它在这里返回false。我怎样才能让这个返回true?

只需将&&切换为||

public bool IsSleeping() 
{ 
    DateTime m_dt = DateTime.Now; 
    string strMilitaryTime; 
    int time; 

    strMilitaryTime = m_dt.ToString("HHmm"); // Get current military time 
    time = Convert.ToInt32(strMilitaryTime); // Convert to int 

    // The time must be between sleeping hours of 2400 and 0700. 
    if (time >= 2130 && time < 700) 
     return true; 

    return false; 
} 
+1

“军事时间”是不是一个东西(或至少,这是一个非常美洲为中心的术语)。我想你的意思是24小时制表示法,但什么时区? – Dai

+0

*只需将'&&'切换为'||'*请尝试看看。你也可以:'return(time> = 2130 && time <700)' –

+0

使用整数并不理想,用'TimeSpan'来表示时间值。 – Dai

回答

2
public static Boolean IsSleeping() 
{ 
    TimeSpan now = DateTime.Now.TimeOfDay; 

    TimeSpan before = new TimeSpan( 7, 0, 0); 
    TimeSpan after = new TimeSpan(21, 30, 0); 

    return now < before || now > after; 
} 
+0

请不要转储“固定”代码,解释您的方法以及为何解决问题。 – CodeCaster

+0

这对我来说非常可读。谢谢!尽管我想知道TimeOfDay是否返回24小时时间,但MSDN可能会回答这个问题。 – Phil

相关问题