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