web-dev-qa-db-ja.com

DateTime.ParseExact()が「M '/' d '/' yyyy H ':' mm ':' ss '」を使用して「4/4/2010 4:20:00 PM」でAM / PMを解析できない理由tt」

私はc#を使用しています。

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy H':'mm':'ss' 'tt", null)

戻り値は常に4:20 AMです-ttの使用で何が問題になっていますか?

ありがとう!

31
Jimmy

時間形式(H)を次のように小文字にします。

DateTime.ParseExact(
            "4/4/2010 4:20:00 PM", 
            "M/d/yyyy h:mm:ss tt", 
            CultureInfo.InvariantCulture);

大文字の "H"は24時間制を示し、小文字の "h"は12時間制を示し、候補文字列のAM/PMを考慮します。

補足:IFormatProviderのインスタンスをこのようなメソッドに提供することをお勧めします(たとえCultureInfo.InvariantCultureであっても)。これは、問題にぶつかるまで重要ではないことの1つであるため、文化情報を指定する習慣をつけるのは良いことです。

62
Andrew Hare

以下を試してください:

Console.WriteLine(DateTime.ParseExact("4/4/2010 4:20:00 PM", "M'/'d'/'yyyy h':'mm':'ss tt", null));

これは出力します:

 4/4/2010 4:20:00 PM
3
Reed Copsey

フォーマット文字列の時間引数には小文字の「h」を使用する必要があります。大文字の「H」は24時間制なので、「4」は午前4時と認識されます(「16」は午後4時なので)。

DateTime.ParseExact("4/4/2010 4:20:00 PM", "M/d/yyyy h:mm:ss:tt", null)
2
Sean Carpenter