2017-10-18 51 views
0

我在asp.NET MVC視圖中使用下拉列表來選擇時間來阻止用戶進入我們的系統。文化信息變化時DateTime.Parse()失敗

@Html.DropDownListFor(model => model.AccessTimeBegin, new SelectList(new List<Object> { 
       new { value = "6/22/2009 1:00:00" , text = "01:00 AM" }, 
       new { value = "6/22/2009 2:00:00" , text = "02:00 AM" }, 
       new { value = "6/22/2009 3:00:00" , text = "03:00 AM" }, 
       new { value = "6/22/2009 4:00:00" , text = "04:00 AM" }, 
       new { value = "6/22/2009 5:00:00" , text = "05:00 AM" }, 
       new { value = "6/22/2009 6:00:00" , text = "06:00 AM" }, 
       new { value = "6/22/2009 7:00:00" , text = "07:00 AM" }, 
       new { value = "6/22/2009 8:00:00" , text = "08:00 AM" }, 
       new { value = "6/22/2009 9:00:00" , text = "09:00 AM" }, 
       new { value = "6/22/2009 10:00:00" , text = "10:00 AM" }, 
       new { value = "6/22/2009 11:00:00" , text = "11:00 AM" }, 
       new { value = "6/22/2009 12:00:00" , text = "12:00 PM" }, 
       new { value = "6/22/2009 13:00:00" , text = "01:00 PM" }, 
       new { value = "6/22/2009 14:00:00" , text = "02:00 PM" }, 
       new { value = "6/22/2009 15:00:00" , text = "03:00 PM" }, 
       new { value = "6/22/2009 16:00:00" , text = "04:00 PM" }, 
       new { value = "6/22/2009 17:00:00" , text = "05:00 PM" }, 
       new { value = "6/22/2009 18:00:00" , text = "06:00 PM" }, 
       new { value = "6/22/2009 19:00:00" , text = "07:00 PM" }, 
       new { value = "6/22/2009 20:00:00" , text = "08:00 PM" }, 
       new { value = "6/22/2009 21:00:00" , text = "09:00 PM" }, 
       new { value = "6/22/2009 22:00:00" , text = "10:00 PM" }, 
       new { value = "6/22/2009 23:00:00" , text = "11:00 PM" }, 
       new { value = "6/22/2009 24:00:00" , text = "12:00 AM" }, 
       }, "value", "text"), new { @class = "form-control", @data_toggle = "tooltip", @data_placement = "top", @title = UserManager.ttEarliestTime }) 

在我被要求國際化應用程序之前,我的控制器中的這部分代碼工作得很好。

 UserRepository repo = new UserRepository(); 

     DateTime start = new DateTime(); 
     DateTime end = new DateTime(); 


     if (model.AccessTimeBegin != "6/22/2009 1:00:00" && model.AccessTimeEnd != "6/22/2009 1:00:00") 
     { 
      start = DateTime.Parse(model.AccessTimeBegin); 
      end = DateTime.Parse(model.AccessTimeEnd); 
     } 

     if (start != DateTime.MinValue && end != DateTime.MinValue) 
     { 
      model.AccessTimeBeginDT = default(DateTime).Add(start.TimeOfDay); 
      model.AccessTimeEndDT = default(DateTime).Add(end.TimeOfDay); 
     } 

     repo.EditUser(model); 

現在,當我切換文化 「ES」 DateTime.Parse()拋出一個異常...

System.FormatException:字符串未被識別爲有效的DateTime

我不明白,爲什麼?我的猜測是Parse()函數着眼於文化,當文化被設置爲「es」並且說「Okay Jose,第6天,第22個月...... QUE?」時,它正在查看字符串。 反過來,當它被設置爲「en-US」時,它會查看字符串並說:「第6個月,第22天,2009年......」,它解析它就好了。

我該如何解決這個問題?

+1

查看複製品。 '6/22/2009 10:00:00'的格式字符串應該是'M/d/yyyy HH:mm:ss',但如果您使用的是2位數的日期,則使用格式字符串'M/dd/yyyy HH :mm:ss' – Igor

回答

1

您可以使用DateTime.ParseExact代替。並給你適當的日期時間格式。

的例子,但你的代碼:

var d = DateTime.ParseExact("0"+"6/22/2009 01:00:00", "M/dd/yyyy HH:mm:ss", null); 

我不得不在日期前,在時間的前面加一個「0」。

+0

我試過使用ParseExact,它產生相同的錯誤。我可能做錯了。你會碰巧有一個例子嗎? – SentOnLine