我正在尝试将数据库中的日期解析为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"]
包含日期(单个日期,因为它为每个日期循环一次)
有谁知道我做错了什么和/或为什么我的自定义日期字符串错误("d-M-yyyy HH:mm:ss"
)
提前致谢
答案 0 :(得分:3)
您的问题是这些日期19-4-2017 0:00:00
。它们只有一位数小时,但您的日期字符串d-M-yyyy HH:mm:ss
需要两个小时。
改为使用d-M-yyyy H:mm:ss
。
答案 1 :(得分:2)
您的输入中有时只有一个小时的数字:
19-4-2017 0:00:00
但格式
d-M-yyyy HH:mm:ss
总是需要两个小时的数字(HH
)。使用
d-M-yyyy H:mm:ss
代替。
答案 2 :(得分:1)
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);