2011-10-22 3 views
1

私はasp.net mvcアプリケーションを持っています。それは多言語であり、いくつかの値をクッキーに書き込む。この問題は、アプリケーションのcurrentCulture(言語)とCookieに格納されているDateTimeの値が異なる場合に発生します。したがって、私は、英語の文化でのみDateTime値を保存して取得することを決めました。しかし、私はその問題に直面しました。Save TimeTime.Nowを切り替える培養の間

var currentCulture = Thread.CurrentThread.CurrentCulture; //for example, ru-RU 
var currentUICulture = Thread.CurrentThread.CurrentUICulture; 

var englishCulture = CultureInfo.GetCultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = englishCulture; 
Thread.CurrentThread.CurrentUICulture = englishCulture; 

var dateTime = DateTime.Now; // 10/22/2011 9:56:15 AM (in English) 


Thread.CurrentThread.CurrentCulture = currentCulture; 
Thread.CurrentThread.CurrentUICulture = currentUICulture; 

return dateTime;    // 22.10.2011 9:56:15 (in Russian). But why? 

英語の文化の中でDateTime.Nowを返したいと思います。

答えて

2

DateTimeは培養情報を保存しません。あなたがToStringと呼んだときに、その文化は重要です。それを返す前に特定のカルチャでフォーマットする場合は、それを文字列として返す必要があります。 CultureInfo.InvariantCulture:あなたはDateTimeとしてそれを返す(そしておそらくそれがタイムゾーン間で動作するようにDateTime.UtcNowを使用したい)と、インバリアントカルチャを使用してフォーマットする必要があり、おそらくかかわら

return DateTime.Now.ToString(cultureInfo); 

+0

ローカル変数 "dateTime"の値が変更されたのはなぜですか? – Alexandre

+1

Err ..何ですか?それは変更されていません - それはちょうど異なったフォーマットです。 「なぜ、日付の文字列表現が変わるのですか」という意味ですか?これは、デバッガが現在のカルチャを使用し、そのメソッドを変更したToStringを呼び出すときです。 –

+0

現在のカルチャがen-USでない場合、en-USカルチャでDateTime構造体(文字列ではない)を返すことは可能ですか? – Alexandre

関連する問題