2011-12-14 43 views
0

我試圖找到合適的格式字符串解析(精確)以下類型的日期:解析日期確切在C#與可變一年長

  • 1-01-01T00:00:00+00:00 - 1月1日0001
  • 2011-12-14T15:53:40+00:00 - 2011年12月14日

所以年份長度似乎是可變的(1-4個字符)。

格式刺痛我目前使用精確的解析是:
c_DateTimeFormatString = "yyyy-MM-ddTHH':'mm':'sszzz"

顯然,這第二個字符串只匹配。第一個今天加劇。現在我們必須匹配那個。

是否有格式字符串來實現這個?

更新#1
我加了明文的實際日期的輸入日期字符串之後。

更新#2
解析精確的過載,允許在傳遞多種格式的字符串。這似乎是正確的方式。

所以第一次嘗試是使用:

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)

但不幸的是這並ONT給出正確的結果,第一日期字符串被解析爲:
01.01.2001
而不是
01.01.0001

所以現在的問題是什麼是正確的解析字符串來解析只有一位數字表示的年份?

+2

什麼是該格式正確的年份?是2011年,2001年,第1年? – 2011-12-14 16:39:49

+1

你說今天第一個彈出。你確定這不僅僅是源數據中的無效信息嗎?它只是看起來像價值的第一部分已被切斷。如果這是您第一次看到它,我會改爲探索*爲什麼*您現在正在看到它。 – 2011-12-14 16:42:22

+0

@Anthony沒有一個有效的答覆,與數據提供商覈對,它只是一個非常不尋常的答案,因爲人們通常會填寫這個日期,但他們不一定要 – ntziolis 2011-12-14 16:50:47

回答

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 
0

如果輸入格式不完全相同,則需要停止使用精確解析,或者根據輸入數據的格式使用不同格式參數調用它。

0

我不相信你需要匹配一年1到4個字符,但2或4個字符。

在這個例子中

1-01-05T00:00:00 + 00:00

你會需要像

d-MM-yyTHH ':' 毫米 ':' sszzz

0

嘗試填充您的字符串,以便年份爲4位數字。您應該添加2,20或201,而不是0。

2

我相信,您可以使用ParseExact的重載來匹配多種格式。

參見MSDN

0

既然您知道您必須支持多種格式,我建議您使用TryParseExact方法。

如果使用一種格式解析失敗(即它返回false),則嘗試下一種格式。