Обработка неоднозначного времени с сохранением дневного света - PullRequest
1 голос
/ 02 апреля 2020

Я работаю над ASP. Net Проектом с использованием Visual Studio 2019. В одной из форм есть поле для получения даты и времени от пользователя, и я отправляю эти данные в другой метод "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);
        }

1 Ответ

2 голосов
/ 02 апреля 2020

Я бы порекомендовал обработку времени на стороне сервера UT C независимо от часового пояса сервера. Это действительно должно быть преобразовано только для конечного пользователя и отображения. Это также означает, что если ваш сервер перемещен в другой часовой пояс, который сейчас довольно распространен для облачных серверов, то ваш проект все равно будет работать правильно.

. NET Все процедуры обработки времени основаны на UT C, и если вы используете библиотечные методы ConvertTimeToUT C и ConvertTimeFromUT C, полученное время будет автоматически обрабатывать переход на летнее время в местных часовых поясах. .

Документация Microsoft здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...