将无效字符串转换为DateTime

时间:2013-10-08 18:17:52

标签: c# .net date datetime

我的输入字符串格式为:

string a = "201101..";
string b = "199008..";
string c = "20110202";

如何将它们转换为yyyymmdd的日期格式?

我知道我可以在第三种类型上使用DateTime.TryParse()。

这就是我所拥有的:

string tempdate = a;
DateTime actualdate;
char[] charsToTrim = { '.' };
tempdate = tempdate.TrimEnd(charsToTrim);
if (DateTime.TryParse(tempdate, out actualdate))
{
}

5 个答案:

答案 0 :(得分:8)

您可以使用DateTime.TryParseExact

传递多种格式
List<string> strDates = new List<string>
{
    "201101..",
    "199008..",
    "20110202",
};
string[] possibleFormats = new[] { "yyyyMM", "yyyydd", "yyyyMd" }; 
                                                     //single M and d to parse
                                                    //both single and double digit
                                                    //Month or Day



DateTime dt; 

foreach(string str in strDates)
{
    if (DateTime.TryParseExact(str.Trim('.'), 
                            possibleFormats, 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None, 
                            out dt))
    {
        Console.WriteLine(dt);
    }
    else
    {
        Console.WriteLine("Invalid date");
    }
}

上面会给你输出:

01/01/2011 12:00:00 AM
01/08/1990 12:00:00 AM
02/02/2011 12:00:00 AM

答案 1 :(得分:2)

你可以使用DateTime.TryParseExtract方法指定dateTime对象的格式,它会尝试为你转换,样本:

if (DateTime.TryParseExact(tempdate, "yyyyMMdd", null, DateTimeStyles.None, out actualdate))
{
  // conversion ok
  // use the actualdate object
}

答案 2 :(得分:2)

Habib's answer的小附录:

string[] possibleFormats = new[] { "yyyyMMdd", "yyyyMM'..'" };
                                                      ↑↑↑↑
DateTime result;
if (DateTime.TryParseExact("201310..", possibleFormats, null, 0, out result))
{
    // result == {01/10/2013 00:00:00}
}

也就是说,您可以在预期的格式字符串中使用两个点,而不需要先将它们剥离。

答案 3 :(得分:1)

看看DateTime.ParseExact。我认为这可能很有用。 并查看此article

答案 4 :(得分:1)

这些线条可能会有所帮助:

private DateTime GetDateTime(string tempDate)
{
    DateTime actualdate;
    if (tempDate.Contains('.'))
    {
       DateTime.TryParseExact(tempdate.SubString(0,6), "yyyymm", out actualdate)
    }
    else 
    {
        DateTime.TryParseExact(tempdate, "yyyymmdd", out actualdate)
    }

    return actualdate;
}