2017-10-18 13 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:文字列は有効な日時として認識されませんでした

私は理解できません、なぜですか?私の推測では、Parse()関数は文化を調べ、文化が "es"に設定され、 "Okay Jose、Day 6、Month 22?... QUE?" 逆に、 "en-US"に設定すると、文字列を見て、 "Month 6、Day 22、Year 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

関連する問題