[英]C# : How to convert string to DateTime, where the string can have any of the standard datetime format
我在DateTime上發布了一個關於String轉換的問題,我得到了很多令人滿意的答案..所以我非常感謝StackOverflow ..
這是String manupulation的另一個問題,我被困住了..
我必須使用C#代碼轉換字符串(來自某些外部源)。字符串可以具有這些預期的DateTime格式。
02/31/2009 01:59:59
24小時格式 02/31/2009 01:59:59 AM
12小時格式 2/31/2009 1:59:59
2/31/2009 1:59:59 AM
02/01/2009 01:59:59 AM
2/1/2009 1:59:59
我嘗試使用DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int,Int,Int,Int,Int)
即,通過提取月,日等的值
但是它不起作用..因為我不能完全用子串提取值...因為字符串的長度是變化的
" and ":" but it becomes bottle neck to derive with (non-)Occurrence of AM/PM 我也試圖提取“/”,“ ”和“:”的出現值,但它變成瓶頸,導出(非)發生AM / PM
只有日,月和小時的長度可以變化..
您可以使用DateTime.ParseExact
重載,該重載采用以下格式列表:
private static string[] formats = new string[]
{
"MM/dd/yyyy HH:mm:ss tt",
"MM/dd/yyyy HH:mm:ss",
"M/dd/yyyy H:mm:ss tt",
"M/dd/yyyy H:mm:ss"
};
private static DateTime ParseDate(string input)
{
return DateTime.ParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
}
如果傳遞的字符串與任何給定格式不匹配,則拋出FormatException
。 請注意,期望AM / PM的格式應出現在沒有AM / PM的相同格式之前( "MM/dd/yyyy HH:mm:ss tt"
出現在"MM/dd/yyyy HH:mm:ss"
)。
更新
正如Henk在評論中指出的那樣,使用TryParseExact
時可以使用相同的功能來刪除異常情況。 此外,與可空類型配對,這可以更清潔:
private static DateTime? ParseDate(string input)
{
DateTime result;
if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
{
return result;
}
return null;
}
現在,如果它無法解析輸入,它將只返回一個空引用。
看一下TryParseExact方法。 這是第一個案例的例子:
DateTime date;
// I changed 02/31/2009 to 01/31/2009 because the first is not a valid date
if (DateTime.TryParseExact("01/31/2009 01:59:59", "MM/dd/yyyy HH:mm:ss", null, DateTimeStyles.None, out date))
{
// string successfully parsed => do something with the date
}
然后,您可以保留不同格式的列表,並嘗試使用所有格式解析字符串,直到成功為止。
以下是所有可能的格式..
- MM / dd / yyyy 08/22/2006
- dddd,dd MMMM yyyy 2006年8月22日星期二
- dddd,dd MMMM yyyy HH:mm星期二,2006年8月22日06:30
- dddd,dd MMMM yyyy hh:mm tt星期二,2006年8月22日06:30 AM
- dddd,dd MMMM yyyy H:mm星期二,2006年8月22日6:30
- dddd,dd MMMM yyyy h:mm tt 2006年8月22日星期二上午6:30
- dddd,dd MMMM yyyy HH:mm:ss星期二,2006年8月22日06:30:07
- MM / dd / yyyy HH:mm 08/22/2006 06:30
- MM / dd / yyyy hh:mm tt 08/22/2006 06:30 AM
- MM / dd / yyyy H:mm 08/22/2006 6:30
- MM / dd / yyyy HH:mm:ss 08/22/2006 06:30:07
- MMMM dd 8月22日
- yyyy' - 'MM' - 'dd'T'HH':'mm':'ss.fffffffK 2006-08-22T06:30:07.7199222-04:00
- ddd,dd MMM yyyy HH':'mm':'ss'GMT'Tue,2006年8月22日06:30:07 GMT
- yyyy' - 'MM' - 'dd'T'HH':'mm':'ss 2006-08-22T06:30:07
- HH:mm 06:30
- hh:mm tt 06:30 AM
- H:mm 6:30
- h:mm tt 6:30 AM
- HH:mm:ss 06:30:07
- yyyy' - 'MM' - 'dd HH':'mm':'ss'Z'2006-08-22 06:30:07Z
- dddd,dd MMMM yyyy HH:mm:ss星期二,2006年8月22日06:30:07
- yyyy MMMM 2006年8月
DateTime dt1 = DateTime.ParseExact(“2007/01/01 04:23:12”,“yyyy / MM / dd hh:mm:ss”,System.Globalization.CultureInfo.CurrentCulture);
DateTime dt = Convert.ToDateTime(“2007/01/01 04:23:12”,System.Globalization.CultureInfo.CurrentCulture);
System.Globalization.CultureInfo.CurrentCulture格式參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.