2013-03-04 80 views
1

根據當前時間,我需要計算一家商店是否實際開放。截至到現在的開放時間被持久化爲TimeSpan使用TimeSpan和DateTime進行計算

public TimeSpan OpeningTime { get; set; } 
public TimeSpan ClosingTime { get; set; } 

我如何計算,如果店內有開放的權利嗎?我嘗試了一些想法,但解決方案看起來相當麻煩。原因之一是需要在TimeSpanDateTime之間進行轉換。是TimeSpan開放時間的正確格式?當時單獨的課程會更有意義嗎?

注:工作日分開操作

+3

Timespans時間間隔/兩個日期之間的時間間隔......不確定如何使用它來表示開放時間或關閉時間我。 – scartag 2013-03-04 22:20:20

+1

可能你可以讓TimeSpans表示從午夜開始的時間。因此'OpeningTime'可以由'8:30 am'的新TimeSpan(8,30,0)代表,'ClosingTime'可能代表'TimeSpan(22,0,0)'代表'10:00 pm' '。編輯:所以對於任何給定的一週的一天,你可以檢查它是否通過開放通過如果(myDateAtMidnight + OpeningTime DateTime.Now)'(但你知道,更好的命名實用程序方法) – 2013-03-04 22:22:49

回答

5

它是開放的,如果:

OpeningTime <= DateTime.Now.TimeOfDay <= ClosingTime 
+0

沒錯。假設(我認爲是合理的),'OpeningTime'就像'TimeSpan.FromHours(8.0)'代表8:00 AM。我認爲這裏的關鍵是OP不熟悉'TimeOfDay'屬性。 – 2013-03-04 22:26:17

0

試着這麼做:

var timeOfDay = DateTime.Now.TimeOfDay; 
if (timeOfDay >= OpeningTime && timeOfDay < ClosingTime) 
{ 
    // open now! 
} 
2

好了,TimeSpan差異的量度兩次,不是實際時間

假設你正在使用的TimeSpan指示打開和關閉時間相對於午夜嘗試

TimeSpan currentTime = DateTime.Now.TimeOfDay; 
bool isOpen = currentTime > OpeningTime && currentTime < ClosingTime; 
0

你可以只使用DateTime.Now.TimeOfDay和比較,以你2周時間跨度

OpeningTime = new TimeSpan(9, 30, 0); // 9:30AM 
    ClosingTime = new TimeSpan(17, 30, 0); // 5:30AM 

    bool isOpen = DateTime.Now.TimeOfDay >= OpeningTime && DateTime.Now.TimeOfDay <= ClosingTime; 
0
TimeSpan OpeningTime = new TimeSpan(8, 0, 0); 
TimeSpan ClosingTime = new TimeSpan(16, 0, 0); 

TimeSpan now = DateTime.Now - DateTime.Now.Date; 

if (now > OpeningTime && now < ClosingTime) 
{ 
    //... 
}