[英]How to convert datetime string in format MMMdyyyyhhmmtt to datetime object?
我試過如下:
DateTime.ParseExact("Feb520161000PM",
"MMMdyyyyhhmmtt", CultureInfo.InvariantCulture)
但它給出了FormatException
。
有趣的是
DateTime.ParseExact(DateTime.Now.ToString("MMMdyyyyhhmmtt"), "MMMdyyyyhhmmtt",
CultureInfo.InvariantCulture)
這也給格式異常。
該格式無法通過從左到右工作的常規解析進行解析 - 您需要自定義代碼來從右到左解析值,因為您希望最左邊的數字是可變寬度(“Feb111111111PM”)。
如果可能 - 將格式更改為具有固定寬度字段的格式(最好是 ISO8601)。 否則手動拆分字符串並從結果部分構造日期(時間部分本身可以正常工作,因此只需要手動解析日期部分)。
其他一些方法和信息可以在關於時間的類似帖子中找到 - DateTime.ParseExact - 如何使用相同格式字符串解析一位數和兩位數的小時數?
Alexei的回答非常正確,如果你讓我解釋一下,我想解釋一下。
您認為5
應該與d
說明符匹配,對嗎? 但這不是DateTime.ParseExact
在DateTime.ParseExact
工作的方式。
由於"d"
自定義格式說明符表示從1
到31
,因此該說明符將在您的字符串中映射52
,而不僅僅是5
。 這就是您的代碼拋出FormatException
的原因。
如您所見,除非您對其進行一些字符串操作,否則無法解析您的字符串格式。
在這種情況下,.NET 團隊建議使用兩位數形式(如05
或為日期和時間值插入分隔符。
您可以創建一個自定義方法來解析此MMMdyyyyhhmmtt
格式,以便僅解析此類格式化字符串;
public static DateTime? ParseDate_MMMdyyyyhhmmtt(string date)
{
if (date == null)
return null;
if (date.Length < 14)
return null;
if (date.Length == 14)
date = date.Insert(3, "0");
DateTime dt;
if (DateTime.TryParseExact(date, "MMMdyyyyhhmmtt",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
return dt;
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.