1

文字列からのDateTimesの変換をアプリケーションで処理できるようにしようとしています。さまざまなカルチャを処理するために、変換で使用するカルチャを指定します。それでカバーできたと思いましたが、長い日付パターンと短い日付パターンなど、そのシステムが「en-US」を定義する方法の特定の要素を変更できることを発見しました。このような場合、解析される日付がMM / dd / yyyy形式の場合、以下のコードは機能しません。

        CultureInfo c = new CultureInfo("en-US");
        string[] permissions = Regex.Split(permissionData, @"\r\n");
        foreach (string permission in permissions)
        {
            string[] details = permission.Split(',');
            this.Add(new WPermission()
            {
                WRegion = Convert.ToInt32(details[0],c),
                StartDate = Convert.ToDateTime(details[1],c),
                EndDate = Convert.ToDateTime(details[2],c)
            });
        }

私の質問は、「en-US」のデフォルト定義にアクセスして、ユーザー定義バージョンの代わりにそれをロードする方法はありますか、それとも私は次のようなものに追いやられていParseExactますか?注意として、解析している文字列のソース形式を制御することはできません。これはサードパーティです。

ありがとう!

4

3 に答える 3

1

英語に関連付けられているCultureInfo.InvariantCultureを使用できますが、地域情報とユーザーのカスタマイズは無視されます。

this.Add(new WPermission() {
    WRegion = Convert.ToInt32(details[0], CultureInfo.InvariantCulture),
    StartDate = Convert.ToDateTime(details[1], CultureInfo.InvariantCulture),
    EndDate = Convert.ToDateTime(details[2], CultureInfo.InvariantCulture)
});
于 2012-05-04T20:01:03.120 に答える
1

この特定の例は、USスタイルの日付フォーマットを使用するInvariantCultureを使用して処理できます。

ただし、日付の正確な表現がわかっている場合は、その正確な形式で日付を解析する意図を非常に明確DateTime.ParseExactに示すという追加の副作用もあるため、引き続き使用することをお勧めします。

于 2012-05-04T20:01:19.477 に答える
0

InvariantCultureは英語には最適ですが、他の言語で機能するより一般的なソリューションについては、次を試してください。

CultureInfo c = new CultureInfo("en-US", false);

コンストラクターにfalseを追加すると、カルチャに対するユーザーのカスタマイズを無視するようになります。

于 2014-10-01T16:17:48.143 に答える