Почему DateTime.Now и DateTime.UtcNow не являются моим текущим местным временем DateTime?
Мы используем DateTime.Now
, но время не равно нашему серверному времени!
Когда я запускаю проект, это значения свойств DateTime
:
DateTime.Now = {15/14/04 05:20:18 AM}
DateTime.UtcNow = {15/14/04 12:20:18 PM}
Но мое текущее местное системное время:
15/14/04 04:50:18 AM
Мой часовой пояс - Тегеран (UTC + 03: 30).
Это первый раз, когда я вижу это поведение! Почему DateTime.Now
не равняется времени моего компьютера?
![enter image description here]()
Ответы
Ответ 1
Убедитесь, что вы не управляете часовым поясом где-то в коде или играете с System.Globalization.CultureInfo
Попробуйте выполнить поиск во всем исходном коде System.Globalization.CultureInfo, возможно, это где-то, также может быть, часовой пояс кэширован где-то, поэтому попробуйте вызвать System.Globalization.CultureInfo.CurrentCulture.ClearCachedData()
до DateTime.Now
.NET DateTime.Now возвращает неправильное время при изменении часового пояса
Ответ 2
Ваш часовой пояс - UTC +03: 30, но из-за перехода на летнее время +4: 30. Это означает, что когда DateTime.UtcNow = {15/14/04 12:20:18 PM}
, оно 04:50:18 AM
в вашем часовом поясе, которое подтверждают ваши часы.
Таким образом, ваш DateTime.Now
не подтвердит ваши параметры даты и времени вашего компьютера, заставив его вернуть значение, не соответствующее вашим часам.
Из-за того, почему принятый ответ работает, можно объяснить DateTime.Now
с помощью класса TimeZoneInfo
для вычисления локального времени из UTC (с использованием часового пояса и летнего времени), но я не знаю, почему это может закончиться синхронизации. Вы никогда не перерабатываете пулы приложений и никогда не выключаете свою машину?;)
System.Globalization.CultureInfo.CurrentCulture.ClearCachedData()
работает, потому что он вызывает TimeZone.ResetTimeZone()
и TimeZoneInfo.ClearCachedData()
.