2016-10-06 70 views
1

我想解析下列日期:7.92016代表2016年9月7日使用.NET標準函數(DateTime.Parse /的TryParse)。在C#(.NET標準庫)中解析「27.92016」日期(d.Myyyy格式)

所以我做了以下(使用,因爲它提出了一個無效的格式異常沒有成功):

DateTime date; 
DateTime.TryParseExact("7.92016", "d.Myyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 

讓我困擾的是它完全可能的,以確定作爲當年與指定的月份結束「YYYY」。所以標準庫應該能夠管理這個。

當然,我可以手動分割字符串,但是有沒有更好的解決方案來管理這種情況?

非常感謝您的幫助!

+0

如果解析d.myyyy是確定的,爲什麼不m.dyyyy或mdyyyy或yyyydm或yyyy.dm或yyyy.md等.. ..沒有這樣寫日期的邏輯 –

+0

安東的回答是非常正確的。由於'M'_可能是2位數字,因此它自己映射爲'92',而不是'9'。在過去檢查我的答案:[如何將字符串解析爲DateTime與「yyyyMMdd嗯」格式?](http://stackoverflow.com/a/34197474/447156)或[如何將日期時間字符串格式MMMdyyyyhhmmtt轉換爲日期時間對象?](http://stackoverflow.com/a/35256012/447156)或[從字符串C#DateTime轉換](http://stackoverflow.com/a/26778076/447156) –

回答

6

由於M112(一位或兩位數)接受價值觀,這是「貪婪」(這樣嘗試接受盡可能多的數字越好),在92的部分是什麼車次TryParseExact關閉。

交換月份和年份,例如,工作得很好:

var sept7of2016 = 
    DateTime.ParseExact("7.20169", "d.yyyyM", 
     CultureInfo.InvariantCulture, 
     DateTimeStyles.None); 

換句話說,你的任務能不能做到使用標準DateTime方法。

+0

你是非常正確的。在這種情況下,.NET團隊建議操縱_字符串。您可以爲月份插入前導零('0'),或者插入日期分隔符。您可以檢查以下內容:[如何使用「yyyyMMdd Hmm」格式將字符串解析爲DateTime?](http://stackoverflow.com/a/34197474/447156)或[如何將日期時間字符串格式MMMdyyyyhhmmtt轉換爲日期時間對象?](http://stackoverflow.com/a/35256012/447156)或[字符串C#中的DateTime轉換](http:// stackoverflow.com/a/26778076/447156) –

+0

謝謝,這個問題對我來說非常有意義。我只是想知道,在確定日期的情況下,.NET團隊是否可以包含一些「智能」處理,但可能會要求增加一些「智能」。 – Rimcanfly

1

不確定是否有另一種選擇,而不是手動分割它。 如果你想讓它更清潔,你可以編寫一個函數將其轉換:

public static DateTime convertDate(string date) 
    { 
     int pos = date.IndexOf('.'); 
     return Convert.ToDateTime(date.Substring(0, pos) + "/" + 
      date.Substring(pos + 1, (date.Length - 5 - pos)) + "/" + 
      date.Substring(date.Length - 4)); 
    }