我正在尝试找到适当的格式字符串来解析(确切)以下类型的日期:
1-01-01T00:00:00+00:00
- 0001年1月1日2011-12-14T15:53:40+00:00
- 2011年12月14日所以年份长度似乎是可变的(1-4个字符)。
我目前用来解析精确的格式是:
c_DateTimeFormatString = "yyyy-MM-ddTHH':'mm':'sszzz"
显然这只匹配第二个字符串。今天第一个加速了。现在我们必须匹配它。
是否有格式字符串来实现此目的?
更新#1
我在输入日期字符串后以明文添加了实际日期。
更新#2
Parse exact有一个重载,允许传入多个格式字符串。这似乎是正确的方法。
所以第一次尝试是使用:
DateTime.ParseExact("1-01-01T00:00:00+00:00 ", new[] { "yyyy-MM-ddTHH':'mm':'sszzz", "yyy-MM-ddTHH':'mm':'sszzz", "yy-MM-ddTHH':'mm':'sszzz", "y-MM-ddTHH':'mm':'sszzz" }, CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.AssumeLocal)
但遗憾的是,这确实给出了正确的结果,第一个日期字符串被解析为:
01.01.2001
而不是
01.01.0001
所以现在的问题是解析第一年的正确解析字符串是什么,仅用一位数表示?
答案 0 :(得分:2)
我相信你可以使用ParseExact的重载来匹配多种格式。
请参阅MSDN。
答案 1 :(得分:1)
根据评论更新:
string y = "yyyy-MM-ddTHH':'mm':'sszzz";
string testDate = "1-01-05T00:00:00+00:00".PadLeft(25, '0');
Console.WriteLine(DateTime.ParseExact(testDate, y, CultureInfo.InvariantCulture));
testDate = "2011-12-14T15:53:40+00:00".PadLeft(25, '0');
Console.WriteLine(DateTime.ParseExact(testDate, y, CultureInfo.InvariantCulture));
输出结果为:
1/5/0001 00:00:00
12/14/2011 15:53:40
答案 2 :(得分:0)
如果输入格式不完全相同,则需要停止使用精确解析,或者根据输入数据的格式使用不同的格式参数调用它。
答案 3 :(得分:0)
我认为您不需要匹配1到4个字符,但需要2到4个字符。
对于这个例子
1-01-05T00:00:00 + 00:00
你需要像
这样的东西d-MM-yyTHH ':' 毫米 ':' sszzz
答案 4 :(得分:0)
尝试填充字符串,使年份长度为4位数。您应该添加2,20或201而不仅仅是0。
答案 5 :(得分:0)
由于您知道必须支持多种格式,因此我建议您使用TryParseExact方法。
如果使用一种格式无法解析(即返回false),请尝试下一种格式。