![](/img/trans.png)
[英]Calculate difference between DateTime.Now and time(7) value in C#?
[英]DateTime.Now as parameter value C#
我有一個方法,其具有DateTime類型的參數,該參數不能在過去,這表示何時執行其他一些東西。 所以很自然地我想使用這個方法並將DateTime.Now傳遞給它,以便一切盡快發生。
這里的問題是調用時的DateTime.Now和實際檢查時的DateTime.Now可能是不同的值,所以我如何確保日期不是過去,但允許方法用DateTime.Now之類的東西來調用? 我不想在這里添加幻數,而是一般的解決方案。
UPDATE。 我發現了這個問題DateTime.Now的頻繁更新
在我看來,你有兩個選擇:
添加另一個不占用時間參數的方法(重載),而是立即執行操作,例如
DoAction(attime); - 將在規定時間執行操作
DoAction(); - 現在就行動吧
后者是一個更好的解決方案,但顯然可能存在方法可供使用的方式/位置的問題(並假設您無論如何都可以添加方法)。
如果你希望盡快發生所有事情,為什么不在調用它時重寫你的方法來運行,或者在調用時立即創建一個沒有DateTime參數運行的重載。
當然,使用重載將允許您在將來的某個時間運行代碼(使用DateTime重載)或立即運行。
這是一個哲學問題 - DateTime.Now總是在過去。
將條目上的參數與DateTime.Now進行比較。 如果它在過去,則使用DateTime.Now。
或者,不要使用參數; 只需使用DateTime.Now。
如果時間足夠接近,測試時必須有一定的容差。
讓你的函數采用Nullable<DateTime>
。 將空時間解釋為“立即執行此操作”。
如果檢查傳遞的DateTime參數是否等於或大於函數開頭的DateTime.Now,則在使用DateTime.now調用函數和檢查函數之間系統時間發生變化的可能性極小。是。 系統時間僅每10或15毫秒更新一次,實際的函數調用時間遠小於此值。
但是,為了確保這種情況永遠不會發生,你必須檢查DateTime.Now.Subtract(new TimeSpan(0, 0, 0, 0, 25))
的傳遞時間,這樣可能會有一點時間a過去的一點點被接受了。
如果你的日期arg是過去的話,拋出一個ArgumentException? 這似乎是最簡單的。
對於參數,請使用返回DateTime
值的委托。 調用該函數時,傳入一個指向返回DateTime.Now
的函數的委托。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.