C#:如何将字符串转换为DateTime,其中字符串可以具有任何标准日期时间格式

前端之家收集整理的这篇文章主要介绍了C#:如何将字符串转换为DateTime,其中字符串可以具有任何标准日期时间格式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在DateTime上发布了一个关于String转换的问题,我得到了很多令人满意的答案..所以我非常感谢StackOverflow ..这是String manupulation的另一个问题,我被困住了……我必须转换一个字符串(从一些外部来源)使用C#代码..字符串可以具有这些预期格式的DateTime ..

> 02/31/2009 01:59:59 24小时格式
> 02/31/2009 01:59:59 AM 12小时格式
> 2009年2月31日1:59:59
> 2009年2月31日上午1:59:59
> 02/01/2009 01:59:59 AM
> 2009年2月1日1:59:59
>等等…….

我尝试使用DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int)即,通过提取月,日等的值,但它不起作用..因为我不能完美地提取子字符串的值…因为字符串的长度变化我也试图提取引用“/”,“空格”和“:”的出现的值,但它变成了瓶颈来导出(非)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时可以使用相同的功能删除异常情况.此外,与可空类型配对,这可以更清洁:

private static DateTime? ParseDate(string input)
{
    DateTime result;
    if (DateTime.TryParseExact(input,DateTimeStyles.None,out result))
    {
        return result;
    }
    return null;
}

现在,如果它无法解析输入,它将只返回一个空引用.

猜你在找的C#相关文章