繁体   English   中英

C#自定义DateTime.ParseExact日期字符串

[英]C# custom DateTime.ParseExact date string

我正在尝试将数据库中的日期解析为DateTime对象。 日期的格式如下: 5-5-2017 12:00:00这是day-month-year Hour:Mins:seconds

更多日期:

5-5-2017 12:00:00
5-5-2017 12:00:00
19-4-2017 0:00:00
19-4-2017 12:00:00
20-4-2017 0:00:00
20-4-2017 12:00:00
21-4-2017 0:00:00
21-4-2017 12:00:00
22-4-2017 0:00:00
22-4-2017 12:00:00
23-4-2017 0:00:00
23-4-2017 12:00:00
24-4-2017 0:00:00
24-4-2017 12:00:00
19-4-2017 0:00:00

我正在尝试使用以下代码解析它们:

DateTime dt = DateTime.ParseExact(Shift_Data["shift_start_time"].ToString(), "d-M-yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Shift_Data["shift_start_time"]包含日期(一个日期,因为它为每个日期循环一次)

我收到以下错误: 错误

有谁知道我在做什么错和/或为什么我的自定义日期字符串是错误的( "dM-yyyy HH:mm:ss"

提前致谢

您的问题是这些日期19-4-2017 0:00:00 它们只有一个数字的小时,但是您的日期字符串dM-yyyy HH:mm:ss期望为两个。

请改用dM-yyyy H:mm:ss

相关文档: https : //docs.microsoft.com/zh-cn/dotnet/standard/base-types/custom-date-and-time-format-strings#the-h-custom-format-specifier-1

有时您的输入中只有一个小时的数字:

19-4-2017 0:00:00

但是格式

d-M-yyyy HH:mm:ss

始终需要两个小时数字( HH )。 采用

d-M-yyyy H:mm:ss

代替。

public static DateTime ConvertToDateTime(string input, string[] inputFormats)
{
    string[] formats = null;
    if(inputFormats == null)
    {
        formats = new string[4];
        formats[0] = "d-M-yyyy HH:mm:ss";
        formats[1] = "dd-M-yyyy HH:mm:ss";
        formats[0] = "d-M-yyyy H:mm:ss";
        formats[1] = "dd-M-yyyy H:mm:ss";
    }
    else
    {
        formats = inputFormats;
    }

    DateTime output;
    IFormatProvider provider = new CultureInfo(CultureInfo.CurrentUICulture.LCID, true);
    output = DateTime.ParseExact(input, formats, provider, DateTimeStyles.NoCurrentDateDefault);
    return output;
}

您可以在inputFormats列表中添加要支持的任何格式。 还可以根据您的需要设置文化。

像这样打电话:

DateTime dt = ConvertToDateTime(Shift_Data["shift_start_time"].ToString(), null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM