Inf*_*nd' 7 c# string datetime
我在DateTime上发布了一个关于String转换的问题,我得到了很多令人满意的答案..所以我非常感谢StackOverflow ..
这是String manupulation的另一个问题,我被困住了......
我必须转换一个字符串(从一些外部来源)使用C#代码..字符串可以具有这些预期格式的DateTime ..
02/31/2009 01:59:59 24小时格式02/31/2009 01:59:59 AM 12小时格式2/31/2009 1:59:592/31/2009 1:59:59 AM02/01/2009 01:59:59 AM2/1/2009 1:59:59 我尝试使用DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int,Int,Int,Int,Int)
ie,通过提取月,日等的值
但它不起作用..因为我不能完美地提取子字符串的值..因为字符串的长度是 变化
我也尝试提取值引用"/"," 空间 "和":"的出现,但它变成瓶颈,导出(非)发生AM/PM
只有日,月和小时的长度可以变化.
Fre*_*örk 23
您可以使用DateTime.ParseExact带有格式列表的重载:
private static string[] formats = new string[]
{
"MM/dd/yyyy HH:mm:ss tt",
"MM/dd/yyyy HH:mm:ss",
"M/dd/yyyy H:mm:ss tt",
"M/dd/yyyy H:mm:ss"
};
private static DateTime ParseDate(string input)
{
return DateTime.ParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
}
Run Code Online (Sandbox Code Playgroud)
FormatException如果传递的字符串与任何给定格式都不匹配,则抛出a .请注意,期望AM/PM的格式应该出现在没有AM/PM的相同格式"MM/dd/yyyy HH:mm:ss tt"之前(之前"MM/dd/yyyy HH:mm:ss").
更新
正如Henk在评论中指出的那样,使用时可以使用相同的功能来TryParseExact删除异常情况.此外,与可空类型配对,这可以更清洁:
private static DateTime? ParseDate(string input)
{
DateTime result;
if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
{
return result;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果它无法解析输入,它将只返回一个空引用.
看一下TryParseExact方法.这是第一个案例的例子:
DateTime date;
// I changed 02/31/2009 to 01/31/2009 because the first is not a valid date
if (DateTime.TryParseExact("01/31/2009 01:59:59", "MM/dd/yyyy HH:mm:ss", null, DateTimeStyles.None, out date))
{
// string successfully parsed => do something with the date
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以保留不同格式的列表,并尝试使用所有格式解析字符串,直到成功为止.
| 归档时间: |
|
| 查看次数: |
26092 次 |
| 最近记录: |