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
            }
posted @ 2021-05-14 21:42  nil  阅读(1841)  评论(0编辑  收藏  举报