在C#中将14号转换为DateTime

时间:2014-12-14 10:18:40

标签: c# string datetime datetime-parsing

我有一个带有2个AM / PM字符的14号码, 我想将它们转换为dateTime

例如:515201483742AM

我试过这段代码:

DateTime result = 
DateTime.ParseExact(dateString, "Mdyyyyhmmsstt",
 CultureInfo.CreateSpecificCulture("en-US"));

输出格式错误

其中515201483742AM5 15 2014 8 37 42 AM

月份为M,没有前导0

天也d没有领先0

小时相同,ttAM

2 个答案:

答案 0 :(得分:1)

无法在不更改字符串的情况下解析字符串,因为M format specifier 可以为两位数,并且它将映射为一个月解析51。这就是你的操作抛出FormatException的原因。与h format specifier相同。

这就是为什么我们需要将您的字符串从515201483742AM更改为05152014083742AM以提供M格式说明符,这将映射05h格式说明符将映射08

您可以使用 1 ;

之类的方法
public static DateTime? ParseDate_Mdyyyyhmmsstt(string date)
{
    if (date == null)
        return null;
    if (date.Length < 14)
        return null;
    if (date.Length == 14)
        date = date.Insert(0, "0").Insert(8, "0");
    DateTime dt;
    if (DateTime.TryParseExact(date, "Mdyyyyhmmsstt",
                               CultureInfo.InvariantCulture,
                               DateTimeStyles.None, out dt))
        return dt;
    return null;
}

并称之为;

var dt = ParseDate_Mdyyyyhmmsstt("515201483742AM");
Console.WriteLine(dt.Value); // 15.05.2014 08:37:42

1:我知道这不是优雅的解决方案,但是当你的月份和小时部分是1位数时,它适用于你的情况。

阅读:DateTime conversion from string C#

答案 1 :(得分:0)

使用double&#34; MM&#34;和&#34; dd&#34;而不是单一的&#34; M&#34;和&#34; d&#34;

DateTime result = DateTime.ParseExact(dateString,"MMddyyyyhmmsstt",CultureInfo.CreateSpecificCulture("en-US"));

它会起作用。