2016-09-05 40 views
0

時,我有我的數據庫startTime 2個time(7)領域和endTime如何檢查時間字段在C#當前時間之間落入存儲在MSSQL

我找回它們並把它們存儲:

private TimeSpan? _startTime 
private TimeSpan? _endTime 

如果_startTime字段等於10:00:00_endTime等於13:00:00。我如何檢查當前時間是否在兩點之間(上午10點到下午1點)?這段時間我需要創建DateTime嗎?

+1

你是否需要一個開始時間比你的結束時間之後,處理那裏的時間落在跨越時間界限的情況呢?他們都是包容性的,獨家的,還是包容性的開始時間,但是獨佔的結束時間?如果你仍然可以影響它,後者可能是最好的計劃。最後,這是您運行系統的本地時間,還是某個特定時區的時間? –

+0

結束時間總是晚於開始時間 – keeg

+0

@JonSkeet意思是什麼,開始時間可能是23:00:00,第二天結束時間是01:00:00?一般來說,IMO在數據庫中保存開始和結束時間,使用'datetime'而不是'time(7)'更好' –

回答

1

這個怎麼樣?

private TimeSpan? _startTime 
private TimeSpan? _endTime 

public bool IsBetween(DateTime? now = null) 
{ 
    if (_startTime == null || _endTime == null) 
     return false; 
    if (now == null) 
     now = DateTime.Now; 
    TimeSpan currentTime = now.TimeOfDay; 
    return _startTime <= currentTime && currentTime <= _endTime; 
} 

你也可以做到這一點的SQL:

CREATE PROCEDURE GetTimes 
AS 
BEGIN 

    DECLARE @CurrentTime TIME 
    SET @CurrentTime = CAST(GETDATE() AS TIME) 

    SELECT 
     t.*, 
     CASE WHEN t.StartTime <= @CurrentTime AND @CurrentTime <= t.EndTime 
      THEN 1 
      ELSE 0 
      END AS 'IsBetween' 
    FROM 
     <MyTable> t 

END 
+0

希望OP可以讓排期結束時間排他......這使得創建相鄰時段變得更加容易,其中任何給定時間恰好在0或1個時間段內。 –

相關問題