ここにあなたのための奇妙なものがあります。
Windows XP(32bit)PCで年初から問題なく実行されているc#インターフェイスを持っています。PCをWindows 7(64bit)にアップグレードしました。 SCCMによってインストールされるアプリ。
最新の実行では、テキスト領域の日付がUK形式(02/05/2014)ではなくUS形式(5/2/2014)で表示され始めました。
使用されているコードは次のとおりです。
_string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +".";
_
FromFormatがソースデータを含むオブジェクトである場合、Charge_FromおよびCharge_ToはDataTime変数です。
PCの地域設定を確認し、.NetからのPCの設定を表示するための小さなテストアプリを作成しました。これらは両方とも、テストアプリのUK形式コードとして設定されています。
_label1.Text = DateTime.Now.ToString();
label2.Text = DateTime.Now.ToString("dd MMM yyyy");
label3.Text = DateTime.Now.ToShortDateString();
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName;
_
正しいフォーマットを強制するためにToShortDateString()
をToString("dd/MM/yyyy")
で置き換えることができることは知っていますが、私の質問はなぜこれが起こっているのですか?
それはWindows 7のアップグレードと関係がありますか?またはSCCM?
前もって感謝します
多くのテストと頭のスクラッチの後、私たちはこれに対する答えを見つけたと思います。
テスト中に、SCCM(windows 7のみ)を介してインターフェイスがインストールされたPCは米国の日付形式のテキストを生成していましたが、Click Oneを直接経由したもの(主にXP)が生成していることに気付きました英国の日付形式のテキスト。
さらなるテストにより、クリックワンスでWindows 7 PCをインストールした場合、英国の日付形式のテキストが得られることが確認されました。
多くの混乱の後、SCCMインターフェースをインストールしたとき、RTMバージョンのレポートビューアがインストールされていましたが、Click OnceがインターフェースをインストールしたときレポートビューアのSP1バージョンがインストールされました。
SCCMを変更してReport Viewer SP1をインストールし、新しいSCCMインストールされたバージョンのインターフェイスをテストして、英国の日付を取得しました。
Report ViewerのバージョンがPCのカルチャ設定やToShortDateString()
の動作に影響する理由はわかりませんが、これが問題であると思われます。
ToShortDateString
method 使用 ShortDatePattern
property これは _"d"
_標準の日付と時刻の形式と同じ あなたのCurrentCulture
の。
_en-GB
_カルチャのShortDatePattern
プロパティは_dd/MM/yyyy
_です。
しかし、_en-US
_カルチャのShortDatePattern
プロパティは_M/d/yyyy
_です。
そのため、常にToShortDateString
およびToString("dd/MM/yyyy")
に置き換えることができません。それらは常に同じではありません。そして _"/"
_ Custom Format Specifier は現在のカルチャまたは指定されたカルチャの日付区切り記号で私を置き換えるので特別な意味があります。
アップグレードプロセスで地域設定が変更されたと思われます。そのため、ToShortDateString
メソッドは異なる結果を生成します。
ただし、CurrentCulture
を指定しなかったため、real問題が何であるかはわかりません。