繁体   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