web-dev-qa-db-ja.com

.ToShortDateStringが予想とは異なる文化形式を返す

ここにあなたのための奇妙なものがあります。

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?

前もって感謝します

7
Tony

多くのテストと頭のスクラッチの後、私たちはこれに対する答えを見つけたと思います。

テスト中に、SCCM(windows 7のみ)を介してインターフェイスがインストールされたPCは米国の日付形式のテキストを生成していましたが、Click Oneを直接経由したもの(主にXP)が生成していることに気付きました英国の日付形式のテキスト。

さらなるテストにより、クリックワンスでWindows 7 PCをインストールした場合、英国の日付形式のテキストが得られることが確認されました。

多くの混乱の後、SCCMインターフェースをインストールしたとき、RTMバージョンのレポートビューアがインストールされていましたが、Click OnceがインターフェースをインストールしたときレポートビューアのSP1バージョンがインストールされました。

SCCMを変更してReport Viewer SP1をインストールし、新しいSCCMインストールされたバージョンのインターフェイスをテストして、英国の日付を取得しました。

Report ViewerのバージョンがPCのカルチャ設定やToShortDateString()の動作に影響する理由はわかりませんが、これが問題であると思われます。

1
Tony

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問題が何であるかはわかりません。

12
Soner Gönül