2012-05-04 4 views
1

私のアプリケーションでstringからDateTimesの変換を処理させようとしています。さまざまな文化に対応するために、私は変換を使用したい文化を指定します。私はそれをカバーしていたと思っていましたが、長くて短い日付パターンのように、そのシステムが "en-US"をどのように定義しているかの特定の要素を変更できることを発見しました。 これらのケースでは、解析される日付がMM/DD/YYYY形式の場合、以下のコードは機能しません。 「EN-US」のデフォルトの定義にアクセスし、ユーザー定義のバージョンの代わりにそれをロードする方法はありますか、私はParseExactのようなものに追いやらいます:アクセスするには特定のシステムで定義されていない、デフォルトのen-USカルチャですか?

 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) 
      }); 
     } 

私の質問はありますか?メモとして、私は解析している文字列のソース形式を制御することはできません。それはサードパーティーです。

ありがとうございます!

+0

ParseExactはあなたのために機能しましたか?上のコードがうまくいきません... –

+1

答えに示唆されているように 'InvariantCulture'を使用してしまいました。問題は、 "en-US"のマシン固有の実装をカスタマイズできるため、比較の基礎として使用する有効な定数ではないということです。 –

答えて

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) 
}); 
+0

ありがとうございます。 –

1

この具体的な例は、米国スタイルの日付フォーマットを使用する、using the Invariant Cultureによって処理することができます。

しかし、あなたは、日付の正確な表現を知っていれば、それはまた、その正確なフォーマット非常に明確に日付を解析する意図を示すの追加の副作用を持っているとして、まだ、DateTime.ParseExactを使用することもできます。

+0

解決していただきありがとうございます。私が他のポスターに答えを出したのは、数秒であなたを倒した唯一の理由です。 ParseExactを使用する理由の良いメモ。 –

0

にInvariantCultureが英語のための素晴らしい作品が、他の言語で動作し、より汎用的な解決のために、試してみてください。コンストラクタにfalseを追加

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

は文化のための任意のユーザーのカスタマイズを無視するよう指示します。

関連する問題