我收到郵件存檔與這樣的日期在其中。字符串到UTC時間轉換
Wed, 17 Dec 1997 13:36:23 +2
Mon, 16 Jun 1997 15:41:52 EST
Tue, 15 Jul 1997 14:37:00 EDT
Tue, 5 Aug 1997 08:37:56 PST
Tue, 5 Aug 1997 15:46:16 PDT
Thu, 5 Mar 1998 08:44:19 MET
Mon, 8 Nov 1999 17:49:25 GMT
Thu, 24 Feb 94 20:06:06 MST
Mon, 19 Dec 2005 14:17:06 CST
Thu, 14 Sep 95 19:15 CDT
Sat, 22 Feb 1997 05:16:55 UT
Mon, 8 Jul 1996 15:48:54 GMT-5
Mon, 25 Nov 1996 17:10:28 WET
Mon, 6 Jan 1997 23:43:48 UT
Fri, 13 Jun 1997 16:44:03 -0400
問題是將此時間轉換爲UTC。這就是我想要做到的。
static void Main(string[] args)
{
var possibleValues = new string[]
{
"Mon, 29 Sep 2014 08:33:35 +0200"
, "Fri, 29 Jun 2001 07:53:01 -0700"
,"Fri, 26 Sep 2014 15:57:04 +0000"
,"Wed, 17 Dec 1997 13:36:23 +2"
, "Fri, 13 Jun 1997 16:44:03 -0400"
, "Mon, 16 Jun 1997 15:41:52 EST"
, "Tue, 15 Jul 1997 14:37:00 EDT"
, "Tue, 5 Aug 1997 08:37:56 PST"
, "Tue, 5 Aug 1997 15:46:16 PDT"
, "Thu, 5 Mar 1998 08:44:19 MET"
, "Mon, 8 Nov 1999 17:49:25 GMT"
, "Thu, 24 Feb 94 20:06:06 MST"
, "Mon, 19 Dec 2005 14:17:06 CST"
, "Thu, 14 Sep 95 19:15:00 CDT"
, "Sat, 22 Feb 1997 05:16:55 UT"
, "Mon, 8 Jul 1996 15:48:54 GMT-5"
, "Mon, 25 Nov 1996 17:10:28 WET"
, "Mon, 6 Jan 1997 23:43:48 UT"
};
foreach (var item in possibleValues)
{
var dateParts = item.Split(' ');
var lastItem = dateParts[dateParts.Length - 1];
if (lastItem.StartsWith("+") || lastItem.StartsWith("-"))
{
try
{
DateTimeOffset offset = DateTimeOffset.Parse(item, CultureInfo.InvariantCulture);
Debug.WriteLine("Input: {0}, UTC Time: {1}", item, offset.UtcDateTime);
}
catch (Exception exc)
{
Debug.WriteLine("Failed - {0}, Error Message: {1}", item, exc.Message);
}
}
else
{
//Sometimes year is a two digit number and sometimes it is 4 digit number.
string dateFormat = string.Format("ddd, {0} MMM {1} {2}:mm:ss {3}", new string('d', dateParts[1].Length), new string('y', dateParts[3].Length), int.Parse(dateParts[4].Substring(0, 2)) > 12 ? "HH" : "hh", lastItem);
try
{
DateTimeOffset offset = DateTimeOffset.ParseExact(item, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None);
Debug.WriteLine("Input: {0}, UTC Time: {1}", item, offset.UtcDateTime);
}
catch (Exception exc)
{
Debug.WriteLine("Failed - {0}, DateFormat Tried: {1}, Error Message: {2}", item, dateFormat, exc.Message);
}
}
}
}
我無法弄清楚如何處理所有情況。我也願意使用野田時間。
我已經通過許多來自SO和谷歌的鏈接找到這個答案,但無法實現這些鏈接的任何答案。如果你知道類似的問題,請讓我知道。
我已經通過下面的鏈接。
Convert.ToDateTime Method
Converting between types
daylight-saving-time-and-time-zone-best-practices
SO Tags timezone
Coding Best Practices Using DateTime in the .NET Framework
conversion-of-a-utc-date-time-string-in-c-sharp
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-09-29 17:36:20
@JohnSaunders,謝謝我會牢記這一點。 – ndd 2014-09-29 17:38:55
除了時區縮寫「WET」和「MET」之外,這些字符串似乎大部分都符合RFC 822/1123標準。此外,格式「GMT-5」和「+2」的偏移量沒有規定,因爲該格式要求值爲+0100「。 – 2014-09-29 17:41:19