2015-10-06 54 views
0

我需要讀取以下格式的字符串:「6102015」(意思是2015年10月6日)並將其轉換爲DateTime對象。日期時間格式 - 一個數字日不被識別

我嘗試下面的代碼,它沒有工作:

DateTime.ParseExact("6102015", "dMyyyy", CultureInfo.CurrentCulture); 

但是,當我一個額外的0測試使用日期字符串的代碼,它的工作。

DateTime.ParseExact("06102015", "dMyyyy", CultureInfo.CurrentCulture); // works correctly 

有沒有辦法讀取這個日期格式而不必添加0?

我提前感謝您的任何幫助。

+5

你應該真的* *避免這種格式。以「1112015」爲例......是2015年1月11日或2015年11月1日?只需對不明確的日期/時間格式說「不」即可。日期和時間代碼很難正確無誤地得到正確的答案,而不會出現像這樣的不必要問題。 –

+0

這是一個很好的觀點。但因爲我只是在處理別人的數據庫,所以我沒有真正的選擇。如果我偶然發現1112015,我真誠地不知道該怎麼辦。:/但謝謝你的洞察力。 – Gaduks

+0

我會與數據庫的所有者交談,然後找出並確定他們意識到:a)當數據庫具有本機日期/時間類型時,將日期/時間值存儲爲字符串是一個壞主意; b)使用不明確的格式是一個真正可怕的想法。 –

回答

3

有沒有辦法讀取這個日期格式,而不必添加0?

添加0是您最擔心的問題,IMO。 需要一行代碼。

假設你已經得到了數據庫,或者是你可以改變的副本,有效,我想:

  1. 創建日期/時間類型的字段,或者如果你必須使用字符串,這樣做,但使用ISO-8601格式(YYYY-MM-DD)
  2. 解析所有這些都已經8個字符
  3. 解析所有其是6個字符通過插入兩個0的值(以便abcccc變得0a0bcccc)的值
  4. 對於每個剩餘價值形式abcyyyy的,:
    • 嘗試解析它爲0abcyyyy
    • 嘗試解析它爲ab0cyyyy
    • 如果只有一個解析工作,商店,導致新列
  5. 現在看看所有剩下的行(即那些你沒有填充了一個「已知良好」值
    • 可能能夠使用其他數據(如插入順序)計算出這是「正確」的解析...
    • 您不得 - 在這種情況下,你需要決定做什麼
+0

感謝您的建議,我想這就是我要做的,特別是因爲我認爲知道有多少日期模糊不清(也就是說,我可能會犯錯多少日期)會更好。再次感謝。 – Gaduks