C#:謹慎 DateTime.Now 帶來的危險
這幾天在做考勤處理相關的專案,在介面上放了開始日期和結束日期兩個 DateTimePicker 控制元件,並都設定格式(Format)為 Short,再放置一個按鈕 Button1,這樣使用者點選這個按鈕時就對選擇的時間段進行資料分析處理。為了節省時間,我把開始日期和結束日期分別設定為 向前15天到當前日期:
dtpEndTime.Value = DateTime.Now;// 因為 DateTimePicker控制元件預設為當前時間,因此我就沒有再設定,當然我設定後也測試過結果一樣
然後處理的時候我就這樣取天數了:
int dayCount = (int)Math.Ceiling(ts.TotalDays) + 1;// 加1是因為開始日期那天也是要處理的。
然後我隨便測試了幾次就交給技術支援去測試了。過不久反饋來了:
處理的時候老是多了一天。
比如 今天是 21 號,那麼預設 begintime 就是 21-15=6 號,總天數是 15+1=16 天,按他的意思應該變成了 17 天,但是事實上並不如此,我處理的時候也是 16天呀,那是哪裡出了問題了呢?正在我百思不得其解的時候,我在處理介面上手工把開始日期改到 7號,按推算 21-7=14,再加1應該是15天,而處理過程中卻是16天!那這多出的一天是怎麼來的了?
我再次開啟視窗,不做任何改動執行處理,結果還是 16天!仔細想想,是不是預設日期出了問題了?
現在我把預設值改成(只取日期部分):
dtpEndTime.Value = DateTime.Now.Date;
豁然開朗!前途一片光明!這樣不管有沒有手工改動過,處理天數完全正確的。
回憶一下,原來 DateTime.Now 這裡包含時間,估計手工改開始日期的時候,微軟就把時間部分去掉了,直接改成 2010-10-6 0:0:0 這個時間了。這樣一處理,當然就有可能多出這麼變態的一天!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-676666/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 知己知彼 解析遠端控制帶來的安全危險
- 《自然》雜誌專訪Bengio:謹防AI被濫用的危險AI
- 【Lambda、SteamAPI】謹慎使用流API
- java流操作要謹慎Java
- 謹慎處理 Service Worker 的更新
- 技術人,請謹慎跳槽!
- 請謹慎使用sp_executesqlSQL
- AIX系統謹慎使用reboot命令AIboot
- UNIX下VG遷移(謹慎) - 轉
- 升級oracle一定要謹慎Oracle
- AIX強制關機需要謹慎AI
- Linux需要謹慎使用的幾個命令Linux
- php 的 危 險 參 數PHP
- 高峰期謹慎編譯業務物件編譯物件
- 新程式語言選擇需謹慎
- 搞程式有風險 修bug需謹慎
- oracle中要謹慎使用update交叉更新!Oracle
- API介面公司要考察的核心,讓你謹慎合作API
- 第55條:謹慎地進行優化優化
- 【警鐘】謹慎刪除歸檔日誌
- DBA要謹慎關閉資料庫(轉)資料庫
- 危險的 target=”_blank” 與 “opener”
- 危險的 target="_blank" 與 “opener”
- 棕櫚油挺危險的
- 從Go、Swift出發:語言的選擇需謹慎GoSwift
- 謹慎做資料庫技術的標準化(轉)資料庫
- 為什麼要謹慎使用Linux find命令?Linux
- 大型專案開發:謹慎使用智慧指標指標
- JAVA基礎:謹慎使用Date和Time類(轉)Java
- php常見的危險函式PHP函式
- Alex Maccaw:簡歷危險Mac
- Linux的10個最危險命令Linux
- Android 中的危險許可權Android
- 13 種危險的網路攻擊
- 最危險的程式設計錯誤程式設計
- Linux的10個最危險的命令Linux
- 谷歌為機器人學習加快步伐 機器人危險不危險?谷歌機器人
- 直播平臺開發難嗎?自己開發須謹慎