处理带日光节约时间的不明确时间

问题描述 投票:0回答:1

[我正在使用Visual Studio 2019进行ASP.Net项目,在其中一个表单中,有一个用于从用户获取日期时间的字段,我正在将该数据发送到另一种方法“ ConvertDateTime”,该方法将日期和时间转换为东部时间并将其保存到数据库中,在检索东部时间时将其转换回用户时区。在日光节约时间中,如何使用以下方法处理歧义时间。

 public static DateTime ConvertDateTime(DateTime time, IPTimeZoneInfo tzInfo)
        {

            if (!tzInfo.Initialized)
            {
                throw new HttpException("Timezone info structure not initialized.");
            }

            if (!String.IsNullOrEmpty(tzInfo.WinID)) // New adjustment using Dynamic DST
            {
                TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(tzInfo.WinID);

                if (!tzInfo.AutoAdjustDst && tzi.SupportsDaylightSavingTime && tzi.IsDaylightSavingTime(time))
                    time = time.AddHours(1.0);

                // In case the time is invalid in the course time zone, increment until the next valid minute
                while (tzi.IsInvalidTime(time))
                    time = time.AddMinutes(1);

                time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

                return TimeZoneInfo.ConvertTime(time, tzi, ServerTimeZoneInfo);
            }
            double hourOff = tzInfo.HourOffset;

            if (!tzInfo.AutoAdjustDst && time.IsDaylightSavingTime())
            {
                hourOff -= 1.0;
            }

            if (time.Year < 100)
            {
                time = time.AddYears(time.Year < 70 ? 2000 : 1900);
            }

            return time.AddHours(-hourOff);
        }
c# asp.net .net visual-studio
1个回答
0
投票

无论服务器时区如何,我都建议服务器端时间处理为UTC。实际上,应该仅将其转换为最终用户并显示。这也意味着,如果将服务器移到其他时区(这在云服务器中现在很常见),则您的项目仍将正常运行。

。NET时间处理例程全部基于UTC,如果您使用库方法ConvertTimeToUTC和ConvertTimeFromUTC,则结果时间将自动处理本地时区的夏时制。

Microsoft documentation here

© www.soinside.com 2019 - 2024. All rights reserved.