2012-05-17 29 views
6

私はC#WinFormsアプリケーションを作成しました。私のコンピュータ上でDateTime奇妙な動作

次作品:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

が、これにはない:それは逆転のマイクライアントのコンピュータで

DateTime.Parse("13/05/2012") 

DateTime.Parse("13/05/2012") 

が、これはしません:これは動作します

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

エラー状態:

String was not recognized as a valid DateTime. 

は、この問題について、インターネット上の任意の情報を見つけるために管理していませんでした。プログラムは.Net Framework 4を使用し、x86アプリケーションです。私はWindows 8 x64を実行し、クライアントはWindows 7 x64を実行します。

なぜこのようなことが起こるのか誰かが気付いていますか?

ありがとうございました。

+2

私は、システムのCultureInfoの日付と時刻のフォーマットに矛盾があると思われますが、「うまくいかない」ということを詳しく教えてください。エラーになりますか?エラーメッセージとは何ですか? –

+1

@DanJ彼のために働いていますが、 'ParseExact'メソッドを使用しているときにクライアントのコンピュータで" 05/13/2012 "と解釈します。私はCultureInfoのチェックに同意します。 – SimpleVar

+4

ISOの 'yyyy-MM-dd'形式で標準化するもう一つの理由。 =) – MCattle

答えて

12

異なるコンピュータで異なる動作をする理由は、それらが異なるカルチャで動作しているためです。それは別の何かを出力かどうかを確認するために、両方のコンピュータでこのコード行を実行してみてください:(ideone)

System.Console.WriteLine(CultureInfo.CurrentCulture); 

は、出力(例):

 
en-US 

文化は日付の区切りそのうちの1つは多くのことを、指定。あなたはすべてのユーザーに対して一貫性のある行動をしたい場合は、文化を指定してみてください:(ideone)

CultureInfo cultureInfo = CultureInfo.InvariantCulture; // or whatever you prefer 
DateTime dateTime = DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", cultureInfo); 

上記のコードは想定していますが、これらのステートメントを使用しています

using System; 
using System.Globalization; 
+4

'mm'は月ではなく分です。あなたは' MM'を探しています。あなたの例が示すように。 – Guvante

+0

@Guvante:ありがとう、私はそれを修正しました。 –

+0

チャームのように働いた!どうもありがとう! –

11

は注意してください。 custom date and time format stringsでは、mm指定子は「月」ではなく「分」を表します。あなたは月にMMを使用する必要があります。

DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture) 
+0

私はこれについて知らなかった、ありがとう! –