[英]how to parse datetime from this format?
我有不同的日期時間格式。 嘗試解析時出現錯誤“ System.FormatException”。 我該如何解析?
?time
"20170620 21:22:02 EST"
?DateTime.Parse(time)
'DateTime.Parse(time)' threw an exception of type 'System.FormatException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233033
HelpLink: null
InnerException: null
Message: "String was not recognized as a valid DateTime."
Source: "mscorlib"
StackTrace: " at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)\r\n at System.DateTime.Parse(String s)"
TargetSite: {System.DateTime Parse(System.String, System.Globalization.DateTimeFormatInfo, System.Globalization.DateTimeStyles)}
由於偏移量是硬編碼的,或者存在數據庫派生,因此發布的答案都無法解決夏令時問題。
EST比UTC晚5小時,因此使用DateTime.ParseExact
可能適合您的需求:
String time = "20170620 21:22:02 EST";
DateTime.ParseExact(time.Replace("EST", "-05:00"), "yyyyMMdd HH:mm:ss zzz", CultureInfo.InvariantCulture);
UTC結果:
6/21/2017 2:22:02 AM
注意:根據IANA的數據,某些時區縮寫根據區域性而具有不同的關聯,因此沒有確切的方法來定義應解析的時區,而不是在應用程序上下文中定義它們(可能使用硬編碼值)。
DateTime.Parse()方法無法識別您當前的日期時間字符串,因此您需要將其重新格式化為該方法可以理解的格式之一。 對於該問題,以下代碼片段可能會有點過分:-),但可以處理很多情況。
// "20170620 21:22:02 EST" -> "wrong" format
// "2017-06-20T21:22:02 -05:00" -> correct format
String input = "20170620 21:22:02 EST";
String temp = input;
// Handle US time zones.
String[] timeZones = {"AST", "EST", "EDT", "CST", "CDT", "MST", "MDT", "PST", "PDT", "AKST", "AKDT", "HST", "HAST", "HADT", "SST", "SDT", "CHST"};
Int32[] utcOffsets = { -4, -5, -4, -6, -5, -7, -6, -8, -7, -9, -8, -10, -10, -9, -11, -10, 10 };
// Correct the timezone part
for (int i = 0; i < timeZones.Length; i++)
{
String timeZonePattern = @"\b" + timeZones[i] + @"\b";
String timeZoneReplPattern = String.Format("{0}:00", utcOffsets[i].ToString("+00;-00"));
temp = Regex.Replace(input, timeZonePattern, timeZoneReplPattern);
if (temp != input)
{
break;
}
}
// Correct the date part
String datePattern = @"(?<year>[\d]{4})(?<month>[0][1-9]|[1][0-2])(?<day>[0][1-9]|[1-2][0-9]|3[0-1])\s*";
String dateReplPattern = @"${year}-${month}-${day}T";
temp = Regex.Replace(temp, datePattern, dateReplPattern);
// Now we should have a correct date time string
DateTime dt;
try
{
dt = DateTime.Parse(temp);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.