2014-01-09 18 views
1

我正在爲某公司開發在線訂購系統(在C#ASP.NET中)。他們的主要要求是隻允許他們的經銷商在指定的時間窗口(上午8點到下午12點)訂購。如何製作時間受限的網頁?

至於安全性,我從服務器端獲取當前時間,在我的網頁文件後面的代碼中使用select getdate() SQL命令。

我得到的時間格式爲DATETIME。我只想得到時間,所以我打電話給DateTime.toShortTimeString(),但這給了我一個字符串,我不能應用任何時間計算。請注意,我不能使用System.DateTime.Now,因爲它會給我客戶端日期。如果客戶更改他們的PC日期,我的網頁可能會在指定的時間範圍之外變得可用。

如何比較時間值?我應該使用TimeSpan,如果是的話,如何?

+0

另請注意,我不想顯示此頁面,除非當前時間在上午8點到下午12點之間 – user3160395

+1

您是否正在使用時區或僅在一個時區內? –

+0

大家好,我很遺憾,我忘記提及我沒有采取生效的時區 – user3160395

回答

4

DateTime結構有一個TimeOfDay property

一種簡單的方法可以是這樣的:

DateTime now = ...; // value returned from SELECT GETDATE() 
TimeSpan currentTime = now.TimeOfDay; 

if (currentTime.Hours >= 8 && currentTime.Hours < 12) { 
    ... 
} 

由於時間跨度比較實現運營商,你也可以做到以下幾點:

DateTime now = ...; // value returned from SELECT GETDATE() 
TimeSpan currentTime = now.TimeOfDay; 

TimeSpan fromTime = new TimeSpan(8, 0, 0); 
TimeSpan toTime = new TimeSpan(12, 0, 0); 

if (currentTime >= fromTime && currentTime <= toTime) { 
    ... 
} 
+0

謝謝@heinzi – user3160395

+0

請告訴我你是如何比較兩個不同的結構...一個是日期時間(現在),另一個是時間跨度(從時間到時間) – user3160395

+0

@ user3160395:糟糕,對不起,忘了撥打TimeOfDay。現在應該修復! – Heinzi

0

雖然你不能使用DateTime.Now,你可以從SQL Server獲取DateTime對象。

我只能猜測你是如何發送您的查詢的數據庫,但這裏有一個實現:

DateTime currentDateTime = DateTime.MinValue; 
using (DbCommand command = database.GetSqlStringCommand("SELECT GETDATE()")) 
{ 
    using (IDataReader dataReader = (IDataReader)database.ExecuteReader(command)) 
    { 
     if (dataReader.Read()) 
     { 
      currentDateTime = (DateTime)dataReader[0]; 
     } 
    } 
} 

TimeSpan from = new TimeSpan(8, 0, 0); // 8am 
TimeSpan to = new TimeSpan(24, 0, 0); // 12pm 
bool canOrderNow = currentDateTime != DateTime.MinValue && currentDateTime.TimeOfDay >= from && currentDateTime.TimeOfDay < to; 
0

你應該做的服務器上的日期進行比較,並確保你的用戶知道的時區是他們必須下訂單。這種方式當你在上午8點到下午12點之間說,用戶將根據他們自己的時區知道何時完成他們的訂單。

+0

謝謝,但它會是你告訴我怎麼我可以做服務器端的comaparison ...任何代碼? – user3160395

0

如果您使用sql2008或以上....那麼你可以使用SQL Server的時間數據類型。

'選擇投(AttDate隨着時間)[時間] 從yourtable'

早期版本:您只能使用

的SQL Server 2008中提取時間

「選擇Convert(焦(5),AttDate,108)[時間] from yourtable'

現在將您的數據與上述時間進行比較。

+0

謝謝你的回答 – user3160395

+0

我沒有日期和時間表 – user3160395