-1

我的输入字符串的格式为:

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))
{
}
4

5 回答 5

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
于 2013-10-08T18:26:13.327 回答
2

您可以使用DateTime.TryParseExtract方法来指定 dateTime 对象的格式,它会尝试为您转换,例如:

if (DateTime.TryParseExact(tempdate, "yyyyMMdd", null, DateTimeStyles.None, out actualdate))
{
  // conversion ok
  // use the actualdate object
}
于 2013-10-08T18:20:56.110 回答
2

哈比卜回答的小附录:

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

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

于 2013-10-08T18:39:34.883 回答
1

看看 DateTime.ParseExact。我认为它可能有用。看看这篇文章

于 2013-10-08T18:25:39.990 回答
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;
}
于 2013-10-08T18:35:24.237 回答