考慮下面的代碼片斷:意外行爲()
DateTime dt = Convert.ToDateTime("06/16/2014 -0:10");
Console.Write (dt.ToString());
Console.ReadKey();
輸出是6/15/2014 8:10:00 PM
。
這是在Web應用程序測試期間允許手動輸入一天中的時間(日期,HH和MM在單獨的ASP.Net文本框控件中)以及字符最初不限於數字(ASP .net驗證器控件接受「-0」爲0..23範圍內的整數)。
有人可以解釋如何將該字符串轉換爲這個日期/時間的邏輯?我要麼期望拋出異常,要麼「6/16/2014 12:10:00 AM」考慮「-0」與「0」相同(「06/16/2014 0:10」轉換爲「6/16/2014 12:10:00 AM「正如人們所期望的那樣)。
不要」不要讓用戶將日期作爲自由文本插入,或者至少使用非常明確的格式對其進行驗證。有大約兩百萬種衝突的方式來表示時間和日期,你不想開始搞清楚用戶輸入了什麼。 01/02/2014 - 是二月二號還是一號? –
那麼,每個人都認爲-0:10被視爲時區偏移量是正確的。如果使用** 06/16/2014 00:00 -0:10 **作爲輸入字符串,則輸出相同。它需要06/16/2014作爲日期,假定時間在午夜,因爲它沒有被指定(全部用UTC表示)。然後它會佔用我當地時間(UTC-4)並通過** - 0:10 **調整時區** –
AK_:我同意您的說法。 FWIW日期不作爲自由文本輸入,日期部分的文本框設置爲只讀,並且從jQuery datepicker控件捕獲值。 –