簡體   English   中英

如何將格式為 MMMdyyyyhhmmtt 的日期時間字符串轉換為日期時間對象?

[英]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"自定義格式說明符表示從131 ,因此該說明符將在您的字符串中映射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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM