3

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

例如:515201483742AM

我试过这段代码:

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

输出格式错误

515201483742AM在哪里5 15 2014 8 37 42 AM

月份M没有前导0

一天也d没有领先0

tt相同的时间和AM

4

2 回答 2

2

没有更改字符串就无法解析它,因为M格式说明符 可以是两位数,并且它将映射为解析51为一个月。这就是你的操作抛出的原因FormatException。与h格式说明符相同。

这就是为什么我们需要将您的字符串从 更改515201483742AM05152014083742AM以提供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 位数时,它适用于您的情况。

阅读:从字符串 C# 转换日期时间

于 2014-12-14T10:29:07.820 回答
0

使用双“MM”和“dd”而不是单“M”和“d”

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

它会起作用的。

于 2016-12-21T20:34:19.530 回答