SystemEvent.TimeChange показывает то же время даже изменения часового пояса

Я написал Это простое консольное приложение, чтобы проверить, когда мы меняем часовой пояс вручную в windows 7, используя окно времени установки даты, запускается ли событие timechange или нет? Ответ-да, он срабатывает, но я печатаю текущее время, которое не отображается должным образом..

    static void Main(string[] args)
    {
        SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
        Console.Read();
    }

    static void SystemEvents_TimeChanged(object sender, EventArgs e)
    {
        Console.WriteLine(DateTime.Now);
    }

Как только вы запустите консольное приложение, а затем попробуйте изменить часовой пояс, он всегда отражает одно изменение времени, но затем он каким-то образом застрял в это время, даже если вы измените часовой пояс на другой часовой пояс или тот же.

Я что-то пропустила?

чтобы проверить, изменилось ли системное время или нет, я открыл командную строку и использую команду date и "time" для печати текущего времени, которое показывает идеальное время в соответствии с часовым поясом.

2 ответов


Я считаю, что системный часовой пояс кэшируется. Вы можете очистить этот кэш, хотя:

TimeZoneInfo.ClearCachedData();

поставь перед DateTime.Now вызов, и похоже, что он работает нормально. (Работает на моей машине, во всяком случае :)

EDIT: как отмечено в комментариях, похоже, что в некоторые случаи вам также нужно позвонить CultureInfo.CurrentCulture.ClearCachedData(). Я этого не делал, но осмелюсь сказать, что это не повредит:)


глупый вопрос, но вы меняете времени, или просто часовой пояс? 5: 00 - это 5:00, тот факт, что вы изменили часовой пояс (и по расширению "переместили" компьютер на час или два вперед или назад), не изменит тот факт, что системные часы установлены на 5: 00.