c#解析UTC日期时间

我试图解析11月23日23:59:59 UTC +0800作为ac#datetime对象但是尝试标准的datetime解析方法甚至是datetime完全解析我得到无效的日期。

有任何想法吗?

我建议您解析为DateTimeOffset而不是DateTime , 如在MSDN中建议的那样 ,在格式字符串中使用时区偏移说明符时:

 using System; using System.Globalization; class Test { static void Main(string[] args) { string text = "11/23/2011 23:59:59 UTC +0800"; string pattern = "MM/dd/yyyy HH:mm:ss 'UTC' zzz"; DateTimeOffset dto = DateTimeOffset.ParseExact (text, pattern, CultureInfo.InvariantCulture); Console.WriteLine(dto); } } 

然后,如果需要,可以将其转换为UTC的DateTime值,但不存在“具有8小时偏移的DateTime ” – DateTime被视为通用,本地或未指定,无处可用于特定偏移存储。

DateTime 以各种方式是一种奇怪的类型 ,并且可能给不知情的开发人员带来问题。

格式设置的Msdn: https : //msdn.microsoft.com/en-us/library/az4se3k1(v = vs.110).aspx

 public class Program { public static void Main() { //original date string _date = "Thu Jan 15 11:32:09 +0200 2015"; // Describes the date format string _parsePattern = "ddd MMM dd HH:mm:ss zzz yyyy"; DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture); //last settings Console.WriteLine(dto.ToString("dd.MM.yyyy hh:mm:ss",CultureInfo.CreateSpecificCulture("tr-TR"))); } } 

对于扩展方法:

 public static DateTime getDateFromFormat(this string _date, string _parsePattern) { DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture); return Convert.ToDateTime(dto.ToLocalTime()); } 

测试: https : //dotnetfiddle.net/xdnjGy

正如詹姆斯所写,你可以试试

 var dt = DateTime.ParseExact( "11/23/2011 23:59:59 UTC +0800", "MM/dd/yyyy HH:mm:ss 'UTC' K", CultureInfo.InvariantCulture); 

您将在“当地”时间获得约会。

我认为你需要使用ParseExact http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx