[英]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.