![](/img/trans.png)
[英]New start date and new end date should not be in the existing lists of start dates and end dates
[英]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”相同類型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.