如何将字符串转换为UTC日期时间?

27

假设我有这个字符串: 如何将其转换为 DateTimeOffset 对象,该对象将具有 UTC 时间(即 -00:00 作为时区),即使在特定时区的机器上运行也是如此?

假设字符串为: "2012-10-08T04:50:12.0000000"

Convert.ToDateTime("2012-10-08T04:50:12.0000000" + "Z");

--> DateTime d = {10/8/2012 6:50:12 AM} 而我想要的是 DateTime d = {10/8/2012 4:50:12 AM} 好像它会理解我希望日期尽可能简单(顺便说一下-我的机器处于+02:00时区)。


2
所以您想要DateTime还是DateTimeOffset? - Knaģis
5个回答

82

使用 DateTimeOffset.Parse(string).UtcDateTime


1
不知道自从这个问题被提出以来.NET是否有所改变,但我不得不在末尾添加ToString()才能使其正常工作,但它完美地工作了。DateTimeOffset.Parse(string).UtcDateTime.ToString() - alemus

9

接受的答案对我不起作用。 使用DateTimeOffset.Parse(string)DateTimeOffset.ParseExact(string).UtcDateTime转换器正确地更改了DateTime的类型为UTC,但也转换了时间。

要获得与原始字符串时间相同但在UTC中的DateTime,请使用以下方法:

DateTime dt = DateTime.ParseExact(string, "yyyy-MM-ddTHH:mm:ss.fffffff",
    CultureInfo.InvariantCulture);
dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc);

1
var universalDateTime = DateTime.Parse(your_date_time_string).ToUniversalTime();

如何将universalDataTime反转回字符串?在给定值926291224800000的情况下。 - Golden Lion

1
我通过检查DateTimeKind来实现这一点。在我的函数中,会出现两种不同类型的日期时间。我想要从下面的函数将UTC时间转换为本地时间。输入参数date始终是UTC时间。
例如输入:2021-01-19 07:43:00 AM01/07/2021 02:16:00 PM +00:00
public static DateTime GetDateTime(string date)
    {
        try
        {
            DateTime parsedDate = DateTime.Parse(date, GetCulture()); //invarient culture

            if (parsedDate.Kind == DateTimeKind.Unspecified)
            {
                parsedDate = DateTime.SpecifyKind(parsedDate, DateTimeKind.Utc);
            }
            
            return parsedDate.ToLocalTime();
        }
        catch (Exception e)
        {
            throw;
        }
    }

0

在编程中,使用 DateTimeStyles.AssumeUniversalDateTime.Parse(...) 中将会完成工作。

例如:

DateTime.Parse("2023-01-02 9:26", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)

那么解析后的日期时间将会是UTC时间。


这个操作将字符串 "2023-08-31T23:59:59Z" 解析为本地时间,然后应用偏移量将其转换为协调世界时(UTC)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接