- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我发布了一个关于日期时间到字符串转换的问题,我得到了很多令人满意的答案..所以我非常感谢 StackOverflow..
这是字符串操作的另一个问题,我被困住了..
我必须使用 C# 代码转换字符串(来自某些外部源).. 字符串可以具有 DateTime 的这些预期格式..
02/31/2009 01:59:59
24 小时格式02/31/2009 01:59:59 AM
12 小时格式2/31/2009 1:59:59
2/31/2009 1:59:59 AM
02/01/2009 01:59:59 AM
2/1/2009 1:59:59
我尝试使用 DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int,Int,Int,Int,Int)
即,通过提取月份、日期等的值
但它不起作用..因为我无法完美地提取带有子字符串的值..因为字符串的长度是 Varying
我也尝试提取引用“/”、“space”和“:”出现的值,但它成为瓶颈来推导(非-)出现 AM/PM
只有天、月和小时的长度可以变化..
最佳答案
您可以使用采用格式列表的 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);
}
如果传递的字符串不匹配任何给定的格式,这将抛出一个 FormatException
。请注意,需要 AM/PM 的格式应该出现在没有 AM/PM 的相同格式之前("MM/dd/yyyy HH:mm:ss tt"
出现在 "MM/dd/yyyy HH 之前:mm:ss"
).
更新
作为Henk在评论中指出,使用 TryParseExact
时可以使用相同的功能来消除异常情况。此外,与可为 null 的类型配对,这可以变得更简洁:
private static DateTime? ParseDate(string input)
{
DateTime result;
if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
{
return result;
}
return null;
}
现在,如果它无法解析输入,它将简单地返回一个空引用。
关于C# : How to convert string to DateTime, 其中字符串可以具有任何标准日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886444/
我是一名优秀的程序员,十分优秀!