C#:如何字符串转换为DateTime,其中字符串可以有任何标准的datetime格式 [英] C# : How to convert string to DateTime, where the string can have any of the standard datetime format

查看:174
本文介绍了C#:如何字符串转换为DateTime,其中字符串可以有任何标准的datetime格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经张贴在DateTime的一个问题字符串转换,我得到了许多令人满意的答案..所以我感谢StackOverflow的非常..结果这里是字符串manupulation多了一个问题,我坚持.. < BR>结果我使用C#代码将字符串转换(从一些外部源)..字符串可以有日期时间..结果

I had posted a question on DateTime to String conversion, I got many satisfying answers for that .. so I thank StackOverflow very much ..
Here is one more problem of String manupulation, I am stuck with ..

I have to convert a string (from some external source) using C# code .. the string can have these expected format of DateTime ..


  1. 2009年2月31日1时59分59秒&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; 24小时格式

  2. 2009年2月31日上午01时59分59秒&NBSP;&NBSP;&NBSP; 12小时格式

  3. 2009年2月31日1点59分59秒

  4. 2009年2月31日上午01时59分59秒

  5. 2009年2月1日上午01点59分59秒

  6. 2009年2月1日一时59分59秒结果

  7. 等.......

  1. 02/31/2009 01:59:59           24 hours format
  2. 02/31/2009 01:59:59 AM     12 hours format
  3. 2/31/2009 1:59:59
  4. 2/31/2009 1:59:59 AM
  5. 02/01/2009 01:59:59 AM
  6. 2/1/2009 1:59:59
  7. and so on .......

我用 DateTime的尝试(转换.ToInt32(string_date.Substring(6,4)),INT,INT,INT,INT,INT,INT)结果的即通过提取月份,日等值的搜索结果,但它不工作..因为我不能完美地串提取值..作为字符串的长度为结果我也有试图提取指的/,则次数值空格和:,但它成为瓶颈带AM / PM搜索结果的(非)发生派生的日,月,营业时间只有长度可以改变.. 的结果

I tried using DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int,Int,Int,Int,Int)
ie, By extracting the values of month, Day etc

But it doesn't work .. because I can't extract the values with substring perfectly .. as the length of string is Varying
I also have tried to extract the values referring the occurance of "/", "space" and ":" but it becomes bottle neck to derive with (non-)Occurrence of AM/PM

Only the length of Day, Month and Hours can vary ..

推荐答案

可以使用 DateTime.ParseExact 重载需要的格式列表:

You can use the DateTime.ParseExact overload that takes a list of formats:

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。

This will throw a FormatException if the passed string does not match any of the given formats. Notice that the formats expecting AM/PM should appear before identical formats without AM/PM ("MM/dd/yyyy HH:mm:ss tt" comes before "MM/dd/yyyy HH:mm:ss").

更新结果
亨克在评论指出,当使用相同的功能可用 TryParseExact 从而消除异常情况。此外,搭配可空类型这可以稍作清洁:

Update
As Henk points out in the comments, the same functionality is available when using TryParseExact which removes exception situation. Also, paired with nullable types this can be made a bit cleaner:

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

现在它只会如果无法解析输入返回空引用。

Now it will simply return a null reference if it fails to parse the input.

这篇关于C#:如何字符串转换为DateTime,其中字符串可以有任何标准的datetime格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆