[英]c# - Convert string to datetime with DateTime.ParseExact
我必須將文件的字符串提取轉換為datetime。 問題是我的字符串沒有唯一的格式。 例如,我的字符串可以是:19-05-2016 1:24:09:560或19-05-2016 21:24:09:56或19-05-2016 10:24:09:560或19- 05-2016 10:24:09等等。 我還沒有遇到所有可能性(這些字符串是從API調用的json響應中提取出來的)
這就是我的代碼的樣子
public static DateTime ConveDateTime(string a)
{
DateTime finished;
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm:ss:fff", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm:ss:ff", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm:ss:f", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy H:mm:ss:fff", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
try
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy H:mm:ss:ff", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
catch (Exception)
{
finished = DateTime.ParseExact(a, "dd-MM-yyyy H:mm:ss:f", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
}
}
}
}
}
}
return finished;
}
我想知道在轉換字符串方面是否有比我的解決方案更好的解決方案。
DateTime.ParseExact 有一個重載 ,它接受一個可能的格式的字符串數組用於解析。 使用該重載並將代碼減少到一行或兩行。
string[] formats = new string[] {"dd-MM-yyyy HH:mm:ss:fff",
"dd-MM-yyyy H:mm:ss:fff",
"dd-MM-yyyy HH:mm:ss:f",
"dd-MM-yyyy HH:mm:ss",
....};
finished = DateTime.ParseExact(a, formats, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal |
DateTimeStyles.AdjustToUniversal);
如果您不知道所有可能的格式,您也可以從外部文件中讀取它們,以避免在彈出新格式時重新編譯應用程序
另外,如下面的評論中所述,我更喜歡使用DateTime.TryParseExact來更好地控制解析的結果,並避免在格式無法識別的情況下進行昂貴的異常處理。
使用DateTime.Parse()而不是DateTime.ParseExact()怎么樣? DateTime.Parse()比ParseExact更寬容。 這樣您就不必定義所有可能的格式了?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.