2013-05-21 70 views
1

我正在使用此代碼將字符串轉換爲日期。AM/PM指示符的日期格式不正確解析

Dim outputDate as Date ' I have tried also with DateTime 
Dim inputStringDate as String = "January 14, 2013 PM" 
Dim dateFormat as string = "MMMM dd, yyyy tt"  

isValidDate = Date.TryParseExact(inputStringDate, dateFormat, New CultureInfo("en-US"), _  
            Globalization.DateTimeStyles.None, outputDate)  
' isValidDate = true 
outputDate.ToString(dateFormat) 'January 14, 2013 AM 

問題是「tt」無法識別。輸入的文本是「PM」(2013年1月14日PM),但在解析到日期並應用它的格式後,我得到了「AM」(2013年1月14日AM)。

outputDate的時間是00:00:00,但我認爲它應該是PM默認時間12:00:00。

環境:NET 2.0
dtinfo.PMDesignator = PM
dtinfo.AMDesignator = AM

感謝您的幫助

概述

當試圖解析日期帶有AM/PM標識符(tt)但沒有時間(hh:mm)的字符串,例如「2013年1月14日PM」(MMMM dd,yyyy tt),似乎.NET Framework 2會成功解析它,但會通過將時間設置爲AM默認值來忽略AM/PM部分,這是午夜(00:00)。解決方案總是給它一些時間,例如, 「hh:mm tt」或「HH:mm」。
但在同一場景中使用.Net Framework 4時,無需時間解析日期字符串將會失敗;這是因爲.Net 4需要時間和AM/PM指示符(hh:mm tt),或使用24格式(HH:mm)。感謝@戴夫·米切納這個(請查看其評論)

所以在.NET 4中
MMMM DD,YYYY TT - >失敗
MMMM DD,YYYY HH:MM - >失敗
MMMM DD,YYYY HH:MM TT - >作品
MMMM DD,YYYY HH:MM - >作品

+2

可能因爲時間是00:00:00。 – dbasnett

+1

http://stackoverflow.com/questions/7875259/how-get-a-m-p-m-from-datetime – Prageeth

+0

當我嘗試你的代碼時,'isValidDate'也是錯誤的。 –

回答

0

糾正我,如果我錯了,但有沒有這樣的東西 'PM默認時間' 。如果您沒有指定分鐘和秒(「hh:00:00」),或者如果您不指定時間(「00:00:00」),則只有默認時間值指定秒(「hh:mm:00」)。如果你想要PM,你需要給它一段時間。它不知道你在說什麼,如果你把它作爲一個輸入來輸入「AM」,它只是發生在它理解格式時使用的默認值,但不能明確地解析它是AM時間,所以它看起來像像它理解的那樣。