假设TimeZone时将字符串解析为DateTimeOffset

可能是一个超级简单的解决方案,但我显然缺少了一些东西。

我有一个字符串对象,其值是“ 2020/07/29 13:30:00”。

如何将其解析为DateTimeOffset对象,并假设该解析时间的时区为“ GMT标准时间”,或者我希望指定的任何TimeZoneInfo?

然后我该如何获取该DateTimeOffset,并将其Utc时间返回到我选择的任何指定时区?

非常感谢

iCMS 回答:假设TimeZone时将字符串解析为DateTimeOffset

我最容易找到的是这样的东西。

我找不到在特定时区中解析DateTimeOffset的任何方法,但是您可以将字符串解析为DateTime(其中{{1}的Kind },只是充当字符串中信息位的容器,而不会尝试将时区知识应用到其中。

然后,您可以向Unspecified询问给定时区在给定的本地时间的TimeZoneInfo偏移量,并将其应用于UTC以创建DateTime

一旦有了DateTimeOffset,就可以使用其DateTimeOffset方法和ToOffset使用它。

TimeZoneInfo.ConvertTime
,

尝试接受DateTimeOffset.ParseExact参数的DateTimeStyles重载。

此代码:

var dt=DateTimeOffset.ParseExact("2020/07/29 13:30:00","yyyy/MM/dd HH:mm:ss",CultureInfo.InvariantCulture,DateTimeStyles.AssumeUniversal);

返回2020-07-29T13:30:00.0000000+00:00

没有GMT Standard Time,这是Windows中使用的一个非常不幸的名称,它以某种方式设法将英国时间和UTC时间混合在一起,以至于没有人不看文档就不知道这意味着什么。在以下问题中对此进行了充分的讨论和解释:Difference between UTC and GMT Standard Time in .NET。正如答案之一所述:

在Redmond之外不知道GMT标准时间和GMT日光时间的名称。它们是只有在Windows注册表中出现的神话动物。

如果您想假设英国时间,并且您的计算机使用英国时区,则可以使用DateTimeStyles.AssumeLocal

,

此函数应将您的日期时间字符串(假设这是格林尼治标准时间)转换为任何其他时区:

    public static DateTime? ToUTCTimeZone(string sDate,string timeZone)
    {

        DateTime utcDate = DateTime.Parse(sDate);

        DateTimeOffset localServerTime = DateTimeOffset.Now;
        utcDate = DateTime.SpecifyKind(utcDate,DateTimeKind.Utc);

        TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById(timeZone);
        if (cstZone == null)
            return null;

        return TimeZoneInfo.ConvertTimeFromUtc(utcDate,cstZone);

    }//ToUTCTimeZone
本文链接:https://www.f2er.com/1842237.html

大家都在问