2009-03-05 13 views
4

私はasp.netアプリケーションを作成しました。私のポストバックルーチンの1つでは、ユーザーが提出したフォームデータをSQL 2005データベースに保存するだけです。すべて私の開発マシン上で実行されますが、私はライブサイトに私は私の解析日チェッカーから無効な日付を取得している展開する。c#と日付カルチャの問題

基本的に、ライブマシンではアメリカの日付形式が必要ですが、これは私が望むものではありません。ユーザーは、dd/MM/yyyy形式で入力できる必要があります。したがって、21/10/2009のような有効な日付は、ライブサーバーでエラーを返しますが、私の開発マシンではエラーを返しません。以下は、例外をスローするコードです。

DateTime dt; 
dt = DateTime.Parse(sdate); 
//sdate in GB dd/MM/yyyy format 

dd/MM/yyyy形式の日付を期待するように解析ルーチンを強制することはできますか?

答えて

9

は次のようでください:マットで述べたように

System.Globalization.CultureInfo cultureinfo = 
     new System.Globalization.CultureInfo("en-gb"); 
    DateTime dt = DateTime.Parse("13/12/2009", cultureinfo); 
+0

それはあなたが "12/12/9999"という理論を正しい日付にしているのですが、人間の立場からは有効ではないので、そこに配置したコードは今年の今年の日付9999のDateTime.MaxValueに決して達していない – MethodMan

6

DateTime.ParseExactを使用して、予想される形式を指定できます。

+0

...または複数の... –

4

別のオプションを使用すると、web.configファイルで使用したいの文化を指定することです:

<system.web> 
    ... 
    <globalization 
     culture="da-DK" 
     uiCulture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" 
    /> 
</system.web> 
+0

1! – user65439

2

はい、ParseExactはそれを行います。

コードは次のようなものになるだろう:その有用先端ため

dt = DateTime.ParseExact(sdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);