2010-12-01 12 views
0

dd/MM/yyyyという形式の文字列を送信しています。この形式は、web.configグローバリゼーション設定に従って、lv-LVカルチャに解析されています。DateTime.Parse、Latvianカルチャ設定

次に、日付をDateTime.Nowと比較して、それが過去であるかどうかを確認します。

DateTime.Parseは文字列をdd.MM.yyyyに変換しますが、DateTime.Nowの形式はなので、比較は常に失敗します。

なぜDateTime.Nowは同じスレッドカルチャ上のDateTime.Parseの出力と異なるのですか?

ありがとうございます!

(更新)これは私が使用しているコードである:

のinputTextが[DateTime.Nowこの文脈でMMである

DateTime date = DateTime.Parse(InputText, CultureInfo.CurrentCulture); 
// Check it's not in the past 
this.IsValid = (date.CompareTo(DateTime.Now) > 0); 

DD.MM.YYYY形式のフォームからの入力が含まれてLV-LVのCultureInfo [日付]を使用.DD.YYYYフォーマットはDateTime.Parse

+0

私はもっと完全なコードを表示する必要があると思います。 'DateTime'(' .Now'や '.Parse'のようなもの)は独自のフォーマットを持ちません - ddmmとmmddは' DateTime 'ではなく*文字列表現*のプロパティです'価値そのもの。 – AakashM

+0

2つの日付を文字列として比較していますか? 2つのdatetime構造体を比較する場合、toStringがどのようなカルチャを表現しているかは関係ありません。 – Alex

答えて

2

後DD.MM.YYYYフォーマットであるDateTimeはフォーマットしていません - それは単に時点です。

表示している場合、出力していることを意味します。正しいカルチャを使用して日付を出力します。

DateTime.ToStringは、CultureInfoとしてフォーマット・プロバイダを取るオーバーロードがあります

string formatted = DateTime.ToString(new CultureInfo("lv-LV")); 

(コードまたは構成で)指定されていない場合、デフォルトのシステムの文化が(いくつかの場合において、又はCultureInfo.InvariantCulture)が使用されます。

1

2つの日付を比較したい場合は、最初に文字列に変換する必要はありません。

DateTime myDate = DateTime.Parse(myDateAsString);//with the correct locale to ensure it's correctly parsed 
if (myDate < DateTime.Now) 
{ 
    //it's in the past 
} 
関連する問題