2017-06-10 6 views
1

私は次のコード行があります:あなたは日時やフォーマットの一致を見ることができるように(まあ、少なくとも一致するように見える)これは有効な日時として認識されないのはなぜですか?

DateTime dt1 = DateTime.ParseExact("‎2017/‎04/‎09 ‏‎2:44 PM", "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture); 

を、まだ変換するとき、私はまだエラーを取得:

文字列が有効なDateTimeとして認識されませんでした。

答えて

5

あなたが撮影した場所はわかりませんが、あなたの入力にはいくつかの目に見えないユニコード文字があります。 -貼り付けコピーし、これを試してみて、それがうまくいく:

DateTime dt1 = DateTime.ParseExact("2017/04/09 2:44 PM", "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture); 

をさらに掘り、間の「E2 80 8E」/と0、ちょうど2 According to the unicode table前に別のものがあり、これは「左にされます「右の印」。それを動作させるために

一つの方法は、あなたが見て期待していないすべての文字を削除することです:

var input = "‎2017/‎04/‎09 ‏‎2:44 PM"; 

var sanitizedInput = Regex.Replace(input, @"[^\w:/ ]", string.Empty); 

DateTime dt1 = DateTime.ParseExact(sanitizedInput, "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture); 
+0

事は、私はエクスプローラから値を「最後に保存した日」からそれを得るです。元の文字列に '?'私がstring.Emptyに置き換えたシンボル – Eminem

+0

@Eminemソースからきれいな文字列を取得できない場合は、それをサニタイズする方法があります。私の編集を参照 –

+0

あなたの衛生コードは完全に機能します! – Eminem

関連する問題