在 C# 中将 14 个数字转换为日期时间



我有一个 14 个数字,其中 2 个字符是 AM/PM,我想将它们转换为日期时间

例如: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

如果不更改字符串M无法解析字符串,因为格式说明符可以是两位数,它将映射到将51解析为一个月。这就是为什么您的操作会抛出FormatException.与h格式说明符相同。

这就是为什么我们需要将您的字符串从 515201483742AM 更改为 05152014083742AM 以提供M格式说明符将映射05 h格式说明符将映射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# 转换日期时间

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

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

它会起作用。

最新更新