Часовой пояс или временная зона (Time zone) является одним из важных системных параметров, необходимых для корректной работы операционной системы. Неправильно установленный часовой пояс может привести к проблемам в работе программ и самой ОС, поэтому его значение должно строго соответствовать географическому расположению компьютера.
Изменять часовой пояс приходится нечасто, как правило после установки ОС в этом нет необходимости. Но иногда бывают экстренные ситуации, например неожиданная отмена перехода на летнее\зимнее время и, как следствие, массовая смена часовых поясов. В этом случае нас может спасти командная строка. В Windows есть пара способов изменения часового пояса из командной строки, которые мы и рассмотрим.
Утилита TZUtil
Утилита командной строки TZUtil (Windows Time Zone Utility) специально предназначена для изменения часового пояса в операционных системах Windows. Впервые она появилась в Windows Vista\Server 2008 в качестве отдельного обновления, а начиная с Windows 7\Server 2008 R2 входит в состав операционной системы. Исполняемый файл утилиты tzutil.exe хранится в каталоге %WINDIR%\System32.
Синтаксис у tzutil довольно простой. Для вывода справки воспользуемся командой:
tzutil /?
Просмотреть текущий часовой пояс можно командой:
tzutil /g
А для вывода списка всех часовых поясов надо выполнить:
tzutil /l
Для примера изменим текущий часовой пояс с Московского на Ижевский — (UTC+04:00) Ижевск, Самара (Russia Time Zone 3). Для этого выполним команду:
tzutil /s "Russia Time Zone 3"
Примечание. Для отключения перехода на летнее время при установке часового пояса необходимо к названию часового пояса добавлять суффикс _dstoff, например:
tzutil /s “Pacific Standard Time_dstoff”
В связи с отменой перехода на летнее время это не очень актуально, но кто знает 🙂
Кстати, утилита w32tm с ключом /tz также умеет показывать текущий часовой пояс:
w32tm /tz
PowerShell
Начиная с PowerShell версии 5.1 управлять часовыми поясами можно с помощью специальных командлетов Get-TimeZone и Set-TimeZone. Первый предназначен для просмотра информации о часовых поясах, второй соответственно для их изменения. Для того, чтобы посмотреть текущий пояс, надо просто выполнить команду:
Get-TimeZone
А так можно вывести весь список:
Get-TimeZone -ListAvailable
Теперь вернем обратно часовой пояс (UTC+03:00) Москва, Санкт-Петербург, Волгоград (Russian Standard Time):
Set-TimeZone -Id "Russian Standard Time"
Еще для получения информации о часовых поясах можно воспользоваться статическими .Net классами System.TimeZoneInfo и System.TimeZone. Например посмотреть текущий пояс можно так:
[System.TimeZoneInfo]::Local
или так:
[System.TimeZone]::CurrentTimeZone
А список часовых поясов можно вывести таким способом:
[System.TimeZoneInfo]::GetSystemTimeZones()