C# DateTime 将日期字符串格式化为带时区的日期格式

Posted 未将对象引用设置到对象的实例

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# DateTime 将日期字符串格式化为带时区的日期格式相关的知识,希望对你有一定的参考价值。

需求:参数,一个日期字符串,不带时区的那种,一个TimeZoneID。将其转换为UTC时间。

            //可以获取所有的TimeZoneID
            IList<TimeZoneInfo> lst = TimeZoneInfo.GetSystemTimeZones();

            //当日期格式为 2021-05-31T09:00:00Z 时会转换异常。
            string str = "5/18/2021 7:00 AM";

            //目前尚未研究清楚这个是什么时间格式
            var aa = Convert.ToDateTime("2021-05-31T09:00:00Z").ToString("M/d/yyyy hh:mm:ss tt", System.Globalization.DateTimeFormatInfo.InvariantInfo);
            Console.WriteLine(aa); //5/31/2021 05:00:00 PM

            //(GMT-04:00) Eastern Time (US and Canada)
            var esternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

            if (DateTime.TryParse(str, out DateTime dt))
            {
                //var formattedDate = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, DateTimeKind.Unspecified);

                ///获取对应的utc时间
                var utcStartTime = TimeZoneInfo.ConvertTimeToUtc(dt, esternTimeZone);
                var result = utcStartTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                Console.WriteLine(result); //2021-05-18T11:00:00Z
            }

以上是关于C# DateTime 将日期字符串格式化为带时区的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

c# 字符串格式化为日期格式

如何轻松地将GQLQuery的日期字段格式化为另一个时区?

Dart - 将字符串日期格式化为日期时间

使用 Pandas 将字符串格式化为日期时间 - 指令问题

将 DateTime 转换为格式为 YYYYMMDD 的字符串

将 Luxon 日期格式化为 ISO8601 基本格式