C# 解析UTC日期时间

C# 解析UTC日期时间,c#,parsing,datetime,C#,Parsing,Datetime,我试图将2011年11月23日23:59:59 UTC+0800解析为c#datetime对象,但尝试标准的datetime解析方法,甚至datetime精确解析,我得到的日期无效 有什么想法吗?我想你需要使用ParseExact 正如詹姆斯所写,你可以试试看 var dt = DateTime.ParseExact( "11/23/2011 23:59:59 UTC +0800", "MM/dd/yyyy HH:mm:ss 'UTC' K",

我试图将2011年11月23日23:59:59 UTC+0800解析为c#datetime对象,但尝试标准的datetime解析方法,甚至datetime精确解析,我得到的日期无效


有什么想法吗?

我想你需要使用ParseExact

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

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

您将获得一个“本地”时间的日期。

我建议您解析为
DateTimeOffset
而不是
DateTime
,格式为字符串:

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中的
日期时间
值,但没有“偏移量为8小时的
日期时间
之类的东西”日期时间被视为通用、本地或未指定,无法存储特定偏移量


DateTime
是一个错误,可能会给不小心的开发人员带来问题。

Msdn格式设置:

对于扩展方法:

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

对于测试:

您想要什么时间?您是否居住在UTC+08的国家/地区?您希望您的日期时间是UTC时间(所以11月24日07:59)还是什么?输入它运行的机器的本地时间
public static DateTime getDateFromFormat(this string _date, string _parsePattern)
        {
            DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
            return Convert.ToDateTime(dto.ToLocalTime());
        }