微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

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

原文地址:https://www.jb51.cc/csharp/99089.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐