Настройка часового пояса в Windows из командной строки, PowerShell и GPO | Windows для системных администраторов

Acknowledgements

Many thanks to Tom Kludy, who helped figure out how to extract localized display names from Windows language packs.
This library uses output from his TimeZoneWindowsResourceExtractor
to enable the GetDisplayNames and GetDisplayNameForTimeZone methods.

Getabbreviationsfortimezone

Look up the localized abbreviations for a specific time zone:

You can pass a Windows time zone id instead, if you like:

Getcountrynames

Gets a localized list of country names, suitable for selecting a country before
selecting a time zone in a two-dropdown time zone selection control.

Output

KeyValue
AFAfghanistan
AXÅland Islands
ALAlbania
..
YEYemen
ZMZambia
ZWZimbabwe

Getfixedtimezoneabbreviations

Gets the same list of zones as GetFixedTimeZoneIds, but includes localized abbreviations.

TODO: Add examples for this method.

Getfixedtimezoneids

Gets a list of time zone IDs that represent fixed offset from UTC, including UTC itself.
Note that time zones of the form Etc/GMT[ /-]n use an inverted sign from the usual
conventions.

TODO: Add examples for this method.

Getfixedtimezonenames

Gets the same list of zones as GetFixedTimeZoneIds, but includes localized names.

TODO: Add examples for this method.

Getlanguagecodes

Gets a list of all language codes supported by this library. Useful for testing
and validation.

Output

Getnamesfortimezone

Look up the localized names for a specific time zone:

You can pass a Windows time zone id instead, if you like:

Gettimezoneidsforcountry

Get a list of time zone identifiers for a specific country. Similar to the
GetTimeZonesForCountry method, but without localized names.

Output

Like the GetTimeZonesForCountry method, an optional threshold parameter is
supported for limiting the list to those zones that vary only after a specific
date.

Output

Nuget installation

As of version 5.0.0, TimeZoneConverter works with all of the following:

  • .NET 5 or greater
  • .NET Core 2.0 or greater
  • .NET Framework 4.6.1 and greater

Note that .NET Framework versions less than 4.6.1 are no longer supported.

Timezone abbreviations

UPDATED ANSWER

My original response is below, and is still valid. However there is now an easier way, using the TimeZoneNames library. After installing from Nuget, you can do the following:

string tzid = theTimeZoneInfo.Id;                // example: "Eastern Standard time"
string lang = CultureInfo.CurrentCulture.Name;   // example: "en-US"
var abbreviations = TZNames.GetAbbreviationsForTimeZone(tzid, lang);

The resulting object will have the properties similar to:

abbreviations.Generic == "ET"
abbreviations.Standard == "EST"
abbreviations.Daylight == "EDT"

You can also use this same library to get the fully localized names of the time zones. The library uses an embedded self-contained copy of the CLDR data.

ORIGINAL ANSWER

As others mentioned, Time zones abbreviations are ambiguous. But if you really want one for display, you need an IANA/Olson time zone database.

You can go from a Windows time zone to an IANA/Olson time zone and the other direction as well. But be aware that there could be multiple IANA/Olson zones for any given Windows zone. These mappings are maintained in the CLDR here.

:/>  Как изменить чувствительность мыши в Windows 10

NodaTime has both the database and the mappings. You can go from a .Net DateTime or DateTimeOffset with a TimeZoneInfo, to a NodaTime Instant and DateTimeZone. From there, you can get the abbreviation name.

// starting with a .Net TimeZoneInfo
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

// You need to resolve to a specific instant in time - a noda Instant
// For illustrative purposes, I'll start from a regular .Net UTC DateTime
var dateTime = DateTime.UtcNow;
var instant = Instant.FromDateTimeUtc(dateTime);

// note that if we really wanted to just get the current instant,
// it's better and easier to use the following:
// var instant = SystemClock.Instance.Now;


// Now let's map the Windows time zone to an IANA/Olson time zone,
// using the CLDR mappings embedded in NodaTime.  This will use
// the *primary* mapping from the CLDR - that is, the ones marked
// as "territory 001".

// we need the NodaTime tzdb source.  In NodaTime 1.1.0 :
var tzdbSource = TzdbDateTimeZoneSource.Default;

// in previous NodaTime releases:
// var tzdbSource = new TzdbDateTimeZoneSource("NodaTime.TimeZones.Tzdb");

// map to the appropriate IANA/Olson tzid
var tzid = tzdbSource.MapTimeZoneId(timeZoneInfo);
        
// get a DateTimeZone from that id
var dateTimeZone = DateTimeZoneProviders.Tzdb[tzid];


// Finally, let's figure out what the abbreviation is
// for the instant and zone we have.

// now get a ZoneInterval for the zone and the instant
var zoneInterval = dateTimeZone.GetZoneInterval(instant);

// finally, you can get the correct time zone abbreviation
var abbreviation = zoneInterval.Name;

// abbreviation will be either PST or PDT depending
// on what instant was provided
Debug.WriteLine(abbreviation);

Timezonenames

A simple library that provides localized time zone names using CLDR and TZDB sources.

Why? Because .NET’s usual time zone display names are not localized properly, and are often wrong or unsuitable for various scenarios.
Read this blog post for more details.

Note that if you are running .NET 6 on Linux or macOS, the built-in names now stem from ICU and thus this library is no longer needed.
See the .NET blog post for more details.

Usage

First, import the TimeZoneNames namespace:

All functionality is provided as static methods from the TZNames class.

Настройка часового пояса через gpo

Для централизованной настройки часового пояса на компьютерах в домене Active Directory вы можете использовать групповые политики. Готовой политики для настройки часового пояса в GPO нет. Чаще всего используются следующие два варианта настройки часового пояса через GPO: с помощью logon скрипта GPO и с помощью импорта настроек часового пояса в реестр.

Для задания часового пояса через логон скрипт GPO, можете использовать простейший PowerShell скрипт (подходит для всех версий Windows, вплоть до Windows XP и Windows Server 2003):

:/>  Редактирование реестра Windows из командной строки, bat-файлы — mirAdmin

$tmZone = “Russian Standard Time”$WinOSVerReg = Get-Item “HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion”$WinOSVer = $WinOSVerReg.GetValue(“CurrentVersion”)if ($WinOSVer -GE 6){tzutil.exe /s $tmZone} Else {$param = “/c Start `”Change tmZone`” /MIN %WINDIR%System32Control.exe TIMEDATE.CPL,,/Z “$param = $tmZone$proc = [System.Diagnostics.Process]::Start( “CMD.exe”, $param )}

Другой способ настроек времени заключается в импорте содержимого ветки HKLMSYSTEMCurrentControlSetControlTimeZoneInformation с эталонного компьютера с настроенным временем на другие компьютеры через GPO. Процедура импорта ветки реестра через Group Policy Preferences описана в этой статье.

Выберите эту ветку целиком с помощью Registry Browser. В результате все настройки временной зоны будут импортированы в раздел редактора GPO (Computer Configuration -> Preferences -> Windows Settings -> Registry).

Если вы хотите использовать разные настройки временных зон для разных сайтов Acrive Directory, воспользуйтесь GPP Item Level Targeting. Привяжите настройки часового пояса к нужному сайту.

Ошибка при изменении часового пояса в windows server 2022

В Windows Server 2022 RTM есть неприятный баг с настройкой часового пояса через графический интерфейс. Если вы попытаетесь изменить часовой пояс из панели Settings появится ошибка:

Управление часовым поясом в windows из powershell

Получить настройки текущего часового пояса можно и в консоли PowerShell. Используйте команду:

[TimeZoneInfo]::Local

Или

Get-TimeZone

Id                         : Ekaterinburg Standard Time
DisplayName                : (UTC 05:00) Екатеринбург
StandardName               : RTZ 4 (зима)
DaylightName               : RTZ 4 (лето)
BaseUtcOffset              : 05:00:00
SupportsDaylightSavingTime : True

В PowerShell вы можете просмотреть все возможные часовые пояса, доступные в Windows:

[System.TimeZoneInfo]::GetSystemTimeZones()ИлиGet-TimeZone -ListAvailable

Список часовых поясов довольно большой, чтобы найти название нужного часового пояса, воспользуйтесь фильтром:

Get-TimeZone -ListAvailable | Where-Object {$_.displayname -like “*Samara*”}

Или:

Get-TimeZone -ListAvailable | Where-Object {$_.Id -like “*Russ*”}

Можно вывести все часовые пояса в алфавитном порядке:

Get-TimeZone -ListAvailable | Select Id | Sort Id

Чтобы изменить текущий часовой пояс из PowerShell, выполните команду

Set-TimeZone -Name “Astrakhan Standard Time”

Утилита tzutil: изменить часовой пояса из командной строки windows 10

Для смены часового пояса в Windows 11/10/8.1, Windows Server 2022/2022/2022 R2/ используется специальная утилита командной строки tzutil.exe (WindowsTimeZoneUtility), впервые появившаяся в Windows 7. Исполняемый файл утилиты хранится в каталоге
%WINDIR%System32
.

Разберемся с возможностями и особенностями использования утилиты TZUtil.

Откройте командную строку (
cmd.exe
). Чтобы узнать текущий часовой пояс и его идентификатор (TimeZoneID), выполните команду:

tzutil /g

В данном примере Russian Standard Time это идентификатор текущего часового пояса:

Выведите список всех часовых поясов с их названием и идентификаторами:

tzutil /l

Dateline Standard Time
UTC-11
Aleutian Standard Time
Hawaiian Standard Time
Marquesas Standard Time
Alaskan Standard Time
UTC-09
UTC-08
Pacific Standard Time (Mexico)
Pacific Standard Time
US Mountain Standard Time
Mountain Standard Time
Mountain Standard Time (Mexico)
Central Standard Time (Mexico)
Canada Central Standard Time
Central America Standard Time
Central Standard Time
Easter Island Standard Time
SA Pacific Standard Time
Eastern Standard Time
Cuba Standard Time
Haiti Standard Time
US Eastern Standard Time
Turks And Caicos Standard Time
Eastern Standard Time (Mexico)
Paraguay Standard Time
Atlantic Standard Time
SA Western Standard Time
Venezuela Standard Time
Central Brazilian Standard Time
Pacific SA Standard Time
Newfoundland Standard Time
Tocantins Standard Time
E. South America Standard Time
Argentina Standard Time
 Greenland Standard Time
SA Eastern Standard Time
Montevideo Standard Time
Magallanes Standard Time
Bahia Standard Time
Saint Pierre Standard Time
UTC-02
Mid-Atlantic Standard Time
Azores Standard Time
Cape Verde Standard Time
UTC
GMT Standard Time
Morocco Standard Time
Greenwich Standard Time
W. Europe Standard Time
Central Europe Standard Time
Romance Standard Time
Central European Standard Time
W. Central Africa Standard Time
Sao Tome Standard Time
Jordan Standard Time
GTB Standard Time
Middle East Standard Time
FLE Standard Time
Namibia Standard Time
Syria Standard Time
Israel Standard Time
Egypt Standard Time
Kaliningrad Standard Time
E. Europe Standard Time
West Bank Standard Time
Libya Standard Time
South Africa Standard Time
Sudan Standard Time
Arabic Standard Time
Arab Standard Time
Belarus Standard Time
Russian Standard Time
E. Africa Standard Time
Turkey Standard Time
Iran Standard Time
Arabian Standard Time
Astrakhan Standard Time
Azerbaijan Standard Time
Caucasus Standard Time
Russia Time Zone 3
Mauritius Standard Time
Saratov Standard Time
Georgian Standard Time
Afghanistan Standard Time
West Asia Standard Time
Ekaterinburg Standard Time
Pakistan Standard Time
India Standard Time
Sri Lanka Standard Time
Nepal Standard Time
Central Asia Standard Time
Bangladesh Standard Time
Omsk Standard Time
Myanmar Standard Time
SE Asia Standard Time
Altai Standard Time
North Asia Standard Time
N. Central Asia Standard Time
Tomsk Standard Time
W. Mongolia Standard Time
China Standard Time
North Asia East Standard Time
Singapore Standard Time
W. Australia Standard Time
Taipei Standard Time
Ulaanbaatar Standard Time
North Korea Standard Time
Aus Central W. Standard Time
Tokyo Standard Time
Korea Standard Time
Transbaikal Standard Time
Yakutsk Standard Time
Cen. Australia Standard Time
AUS Central Standard Time
E. Australia Standard Time
Vladivostok Standard Time
West Pacific Standard Time
AUS Eastern Standard Time
Tasmania Standard Time
Lord Howe Standard Time
Magadan Standard Time
Bougainville Standard Time
Norfolk Standard Time
Sakhalin Standard Time
Central Pacific Standard Time
Russia Time Zone 10
Russia Time Zone 11
New Zealand Standard Time
UTC 12
Kamchatka Standard Time
Fiji Standard Time
Chatham Islands Standard Time
UTC 13
Tonga Standard Time
Samoa Standard Time
Line Islands Standard Time

Если вы хотите быстро найти вывести все доступные часовые пояса, например, со сдвигом UTC 2, выполните команду:

:/>  Как почистить кэш на компьютере с ОС Windows 8? | El:Store

tzutil /l | find /I “utc 02”

Чтобы изменить текущий часовой пояс (UTC 03:00) Москва, Санкт-Петербург, Волгоград – (Russian Standard Time) на (UTC 04:00) Ижевск, Самара (Russia Time Zone 3). Для этого нужно указать идентификатор часового пояса:

tzutil /s “Russia Time Zone 3”

Текущий часовой пояс хранится в реестре Windows. Вы можете проверить, что он изменился так:

reg query HKLMSYSTEMCurrentControlSetControlTimeZoneInformation

Чтобы отключить переход на летнее время для конкретного пояса, нужно указать идентификатор часового пояса с суффиксом _dstoff, например

tzutil /s “Pacific Standard Time_dstoff”

Эта команда изменит часовой пояс компьютера и отключите сезонный перевод часов.

Вы можете вывести полную информацию о часовом поясе и настройках сезонного перевод часов так:

w32tm /tz

Оставьте комментарий

Adblock
detector