我的输入字符串格式为:
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))
{
}
答案 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;
}