2017-07-31 14 views
-3

私は何を探しているのかわかりません...なぜ、これは "文字列が有効なDateTimeとして認識されませんでした"という例外を生成しますか?このDateTime.Parseがエラーを生成する理由は何ですか?

string dt = "7/28/‎2018 ‏‎2:48:32 PM"; 
try 
{ 
    DateTime Test = DateTime.Parse(dt); 
} 
catch { } 

私がコメントして上記のテストに置き換える前に、コードを何度かステップしました。私がdtに割り当てる値は、実際に私のプログラムで割り当てられる値です。私はもともとのようなものを使用していた:

if (DateTime.TryParse(dt, out DateTime Timestamp)) 
{ ... } 

私はVisual Studio 2017と.Net 4.6.2を使用しています。

+6

これは、「CurrentCulture」設定の標準日時フォーマットではないことを意味します。 'M/dd/yyyy h:mm:ss tt'フォーマットと' InvariantCulture'のような_proper_ cultureを使う代わりに、 'ParseExact'や' TryParseExact'メソッドを試してみてください。 –

+0

以下のコメントを参照してください。私の現在の文化は正しく設定されています。私は現在の文化を使いたいと思っていました。日時は現在の文化形式になります。 Visual Studioの再インストールが完了しましたが、今度は正しくコンパイルされ、期待される出力が生成されます。 –

答えて

0

問題は、再インストールのVisual Studio 2017でのものだったと予想されるようになりました元のコードは動作します。

2

DateTime.Parse()は、指定された日付の形式を推測しようとします。それは12時間形式だとHHは24時間形式

を表しているので時間は(もHHを使用することができます)の代わりにHHの使用されていることを

string dt = "7/28/‎2018 ‏‎2:48:32 PM"; 
try 
{ 
    DateTime Test = DateTime.ParseExact(dt, "M/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); 
} 

注:あなたは日付が常に特定のフォーマットの使用ParseExact()になると確信していた場合

+0

ParseExact()は私が時間をどのような形式にするのか分からないので(私は秒とかam/pmかもしれません)つまり、ParseExactはまだ動作しませんでした。それができなかったので、私は別のマシンで試して、元のコードが働いた。私のマシンに何か間違っています。それは私が別のマシンでそれを試してみるようになったからです。 –

0

DateTime.Parseは、培養感受性である。既定では、CultureInfo.CurrentCultureを使用して適切な日時形式を取得します。別のカルチャを使用して文字列を解析する必要がある場合は、IFormatProvider引数を取るパーズオーバーロードを使用する必要があります。

例は、(永続化のために有用)不変の文化の中で:

var dt = DateTime.Parse("07/31/2017 16:15:26", CultureInfo.InvariantCulture); 
Console.Write(dt.ToString(CultureInfo.InvariantCulture)); // 07/31/2017 16:15:26 
+0

情報ありがとうございます。私は実際に現在の文化を使いたい。テルアビブ、上海のワルシャワで運営される場合、私は地元の文化を利用する必要があり、その入力は地元の文化の形式になります。 現在作業中です。私はコードを変更せずに別のマシンからコンパイルしました。私のマシンに何か問題があります。 Visual Studioを削除して再インストールしています(はい、再起動しました)。 –

関連する問題