2013-07-22 30 views
5

yyyyMMddhhmmss形式の文字列からDateTimeオブジェクトを解析する必要があります。カスタム日付時刻形式の解析

私はこのコードを実行すると、それが正常に動作します:

DateTime y = new DateTime(2013, 07, 22, 15, 35, 23); 
string x = y.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

しかし、私はこのコードを実行する場合 - 一見逆の操作 - 私は例外を取得:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddhhmmss", CultureInfo.InvariantCulture); 

を例外は次のとおりです。

System.FormatException: String was not recognized as a valid DateTime. 

ここで何が間違っているのか困惑しています。私は間違って何をしていますか?

注:タイムゾーンを心配しないでください。後で正しいタイムゾーンを取得することに対処できます。

+0

サンプルxは20130722033523である、ない20130722153523 – empi

答えて

15

問題は、あなたが指定した日付時刻形式は12時間形式のためhhを使用しますが、入力文字列がその領域で15を持っているということです。 15が予想された範囲外であるため、これを解析できません。

代わりに24時間形式のためHHを使用してみてください:

string x = "20130722153523"; 
DateTime y = DateTime.ParseExact(x, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); 

参考資料:最初のコードで

+3

MSDNからストレート:フォーマットがカスタムフォーマットパターンの場合( "yyyyMMdd HHmm"などの)日付または時刻区切り文字が含まれていない場合は、プロバイダパラメータと各カスタム書式指定子の最も広い形式に不変のカルチャを使用します。たとえば、書式パターンで時間を指定する場合は、幅の狭い書式「H」ではなく、幅の広い書式「HH」を指定します。 –

+3

+1。 http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx - (見積もり)**呼び出し元への注**: .NET Framework 4では、ParseExactメソッドはFormatExceptionをスローしますif解析される文字列には、一致していない時間コンポーネントとAM/PM指定子が含まれています。 .NET Framework 3.5およびそれ以前のバージョンでは、AM/PM指定子は無視されます(/ quote) – Renan

関連する問題