簡體   English   中英

處理開始日期和結束日期的DATETIME和DATE

[英]Handling DATETIME and DATE for Start and End dates

我有一張桌子,上面有關於一個人休假時間的信息。 兩個關鍵字段是:

** SQL

StartDate DATE NOT NULL,
EndDate DATE NULL

在我的.Net代碼中,這些存儲為DateTime類型。

因此,如果用戶從8月13日到8月13日休假,那將剩下1天。 日期應包含在內,開始日期應為0:00(午夜),然后結束日期基本上應為23:59.59。

因此,根據是“開始”還是“結束”,對它們的處理略有不同。

我的系統可以整天工作。 即DATE值。 我根本不使用時間,但是由於.Net中的DateTime類型而被迫使用。 但是從數據庫讀取時,它們都設置為午夜。

我關注的代碼不起作用,是這樣的:

public string AvailableToday
    {
        get
        {
            if (NonAvailibility != null)
            {
                var i = NonAvailibility.FirstOrDefault(t => DateTime.UtcNow <= t.EndDate && DateTime.UtcNow >= t.StartDate);
                if (i != null) return i.NonAvailibilityType ;
                return "";
            }
            return "";
        }
    }

該代碼的重點是返回該人今天不在的原因。 如果此人可用,我應該返回一個空字符串。

問題是,與我一起測試的用戶從8月12日到8月13日休假。

那應該整整兩天。 但是由於DateTime.UtcNow隨時間返回當前日期,而我們現在排在第13位...代碼表明他今天不休假。

解決方法可能是將EndDate值增加一天? 因此,它將從8月12日至14日午夜進行檢查,而不是8月12日至8月13日。 這似乎很棘手,但可能是我唯一的解決方案。 或者,截斷DateTime.UtcNow以將其設置為午夜,然后將檢查更改為:

t => DateTime.UtcNow <= t.EndDate && SetToMidnight(DateTime.UtcNow) >= t.StartDate

(或者,不要使用“ SetToMidnight ....”,而要使用DateTime.UtcNow.Date)

是否有更好的方法來處理此解決方案,還是我需要執行以上可能的解決方案之一?

(注意,TimeZones以及在另一個問題中正在處理的所有內容)第十

試試DateTime.UtcNow.Date

public string AvailableToday
{
    get
    {
        if (NonAvailibility != null)
        {
            var i = NonAvailibility.FirstOrDefault(t => DateTime.UtcNow.Date <= t.EndDate && DateTime.UtcNow.Date >= t.StartDate);
            if (i != null) return i.NonAvailibilityType ;
            return "";
        }
        return "";
    }
}

我希望這將有所幫助。

我以前遇到過這個問題,您會發現t => DateTime.UtcNow <= t.EndDate不能正常工作,因此我在結束日期上添加了+1以使其生效,您也可以在數據庫改為DateTime而不是Date ,最好將變量保持在“ code”和“ database”相同類型

  1. 將您的數據庫類型更改為DateTime
  2. 如您所說,我將結束日期加+1來解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM