2013-06-04 24 views
5

更新日これはWindows 7のバグです。私はWindows 8と同じシナリオをテストしましたが、ここではこれを複製できません。詳細については、この問題に投稿したMS Bug Reportをご覧ください。助けてくれたすべての人に再び感謝します。エラーが同様にサーバー2008 R2で発生Cシャープ日付時刻形式

UPDATE 2

オリジナル服従次ページDate Formats上の例で、私はフォーマットを制御することができる午前を使用して

(期待されるものの一種)私の日付のしかし、私のクライアントのうちの1人は、Windows 7を使用して、この 'ddd MM/dd/yy'のような短い日付を表示するようにカレンダーを修正しました。 Short Date Format

これは、enter image description hereのような時計を表示します。

これは、自分のマシンで日付を使用する場合を除いて正常に動作します。私は

...私はカレンダーの設定で曜日を表示し、同じフォーマットオプションを使用するようにDDDを離陸した場合、私は以下を参照してください...次のように

String.Format("{0:MM/dd/yy}", dt); //the result is 06 04 13, notice the spaces 

を日付の書式を設定するとき

String.Format("{0:MM/dd/yy}", dt); //the result is 06/04/13, this time it has forward slashes 

日付の.ToShortDateString()オプションは "Tue 06/04/13"と表示され、データベースに入るときにクラッシュします。これが問題の発見方法です。

フォーマットをハードコーディングしないと、つまり月をスラッシュに合わせて1日に追加すると、これを動作させるために他に何ができるか知っていますか?

+4

日付を文字列として書式設定していて、何らかのSQL経由で送信しているようです。文字列の書式の代わりにこれにコマンドパラメータを使用することを検討しましたか? –

+0

マイケルのコメントに+1。テキスト表現が最終目標でない限り、文字列変換は避けるべきです。 –

+0

はい、これはかなり古いアプリです。これはちょうど渡されたSQL文字列を持っています。私はコマンドパラメータに変換することを避け、これをEFに変換できるまで待ちます。それは非常に良い考えのように聞こえる。私はそれを試してみましょう。 – JabberwockyDecompiler

答えて

3

あなたには、いくつかのSQLを経由してそれを送信するために文字列として日付の書式を設定しているようですね。文字列の書式の代わりにこれにコマンドパラメータを使用することを検討しましたか?

2

編集注:をコントロールパネルから短い日付パターンを変更するとこれはOPのポストのように「追加設定」タブを使用して、Windows 7のバグになりそうだ、両方のCurrentCultureとCurrentUICultureのの日付セパレータも同様に変更されます。

短い日付形式を変更すると、最初の非形式文字が現在のカルチャの日付区切り記号として選択されているように見えます。 CurrentCultureとCUrrentUiCultureの両方が、[意図しない]カスタマイズを反映するように変更されています。ある[明るい]開発者のように、誰も曜日のような短い日付形式を持つことはないという[不当な]前提を作ったようです。

ニースキャッチ!バグをマイクロソフトに報告しますか?

不変のカルチャを使用して日付などの書式を設定すると、ユーザー設定は影響を受けません。あなたが指定した文化は、Windows OSに設定されている現在の文化と一致した場合

CultureInfo usa = CultureInfo.GetCultureINfo("en-US") ; 
string.Format(usa , "{0:MM/dd/yy}" , dt) ; 

しかし、ユーザーのカスタマイズが適用されます:あなたが欲しい文化のインスタンスを

String.Format(CultureInfo.InvariantCulture , "{0:MM/dd/yy}", dt); 

のようなものを試してみてくださいまたは使用の意味を現在のWindows culture以外のカルチャを使用しない限り、同じ問題が発生します。MDSNで

詳細:

特定の文化を指定せずに、あなたはどんなUSER-で、現在のユーザーのCurrentCultureCurrentUICultureを取得します指定された改造者がそれに適用されます。

+0

ご意見ありがとうございます。残念ながらカルチャーフォーマットでは問題は解決されませんでした。私はそれも解決策だと思っていましたが、dddの後のセッティングのスペースはセパレーターを宇宙に蹴り込んでいたと思います(セパレーターのためにヨーロッパのようなものです)。フォーマットは正しく行われましたが、スペースはまだ現れました。 – JabberwockyDecompiler

+0

@ Gouber80。面白い。私はこれをWindows 7のバグと呼ぶ必要があります。私の修正された答えを見てください。 InvariantCulture(ちょうどチェックされている)を使用すると、問題は明らかになりません。 –

+0

私はそれがCurrentCultureで修正されているべきであることに同意するでしょう - あなたがクラッシュからの答えを見るならば、彼はInvariantCultureに現れないことに気付きました。私はこれをWin 7フォーラムに載せると思います。潜在的な窓の問題かもしれないことがわかってからしばらくありました)。 – JabberwockyDecompiler

2

InvariantCultureを使用すると効果があります。私はそれを確認するテストコンソールアプリを作成しました。コードでは、スレッドの現在の文化は不変一つであることが変更されます。

class Program 
{ 
    static void Main(string[] args) 
    { 
      /// Displays '06 04 13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; 

      /// Displays '06/04/13' 

     Console.WriteLine(string.Format("{0:MM/dd/yy}", System.DateTime.Now)); 

     Console.ReadLine(); 
    } 
} 
+0

私はこれのテストを行い、それは動作します。マイケルのコメントは答えとして投稿すると、私が待っているより適切な解決策に終わってしまったので、私が求めていたことに答えたので、私はそれを上書きしました。私は明日まで彼を与えるでしょう。それから私はあなたの答えを答えとしてマークします。 – JabberwockyDecompiler

+0

ところで、これは完全にMicrosoftのバグのようです。 Windowsの短い日付形式が 'ddd MM/dd/yy'に設定されていても、日付はスラッシュで表示されます。私はWindowsのタスクバーでよく見えるので、Windowsの設定を 'ddd MM/dd/yyyyy'にしました。しかし、Outlookにはスラッシュなしの日付が表示されていたことに気づきました(あなたと同じ問題です)。 – crash

+0

はい、他の人もそれについて言及しています。私の答えのリンクを見てください、私はあなたが次のことに興味があるなら、私はMSのフォーラムにこれを投稿しました。 – JabberwockyDecompiler

1

詳細については、私がHEREと書いたMSフォーラムの投稿にアクセスしてください。