Múi giờ, cùng với thời gian và ngày tháng, là một trong những tham số quan trọng của máy tính. Để Windows và ứng dụng hoạt động chính xác, múi giờ phải được đặt theo vị trí địa lý của máy tính. Trong bài viết này, chúng ta sẽ xem cách thay đổi múi giờ trong Windows từ GUI, Command Prompt, PowerShell và sử dụng Group Policy.
Ứng dụng Settings mới được sử dụng trong Windows 10 và Windows Server 2019/2016 để đặt ngày giờ và múi giờ. Bạn có thể đặt múi giờ từ GUI bằng cách nhấp chuột phải vào biểu tượng đồng hồ trong khay hệ thống và chọn Adjust date/time. Mặc định, Windows cố gắng tự động chọn múi giờ (tùy chọn Set time zone automatically được bật). Bạn có thể tắt tùy chọn này và đặt múi giờ yêu cầu thủ công bằng cách chọn nó trong danh sách thả xuống.


Mẹo. Bạn cũng có thể sử dụng applet Control Panel kinh điển "Date and Time" để thay đổi cài đặt múi giờ trong Windows. Chạy lệnh timedate.cpl.

Cho phép hoặc ngăn người dùng thay đổi múi giờ trong Windows
Mặc định, người dùng không cần quyền quản trị để thay đổi múi giờ (khác với thay đổi ngày/giờ). Hành vi này có thể thay đổi bằng console Local Security Settings (secpol.msc). Đi đến Security Settings → Local Policy → User Rights Assignment. Chính sách được gọi là Change the time zone. Như bạn thấy, múi giờ có thể được thay đổi bởi system, administrators và tất cả users. Để ngăn người dùng thay đổi múi giờ, hãy xóa nhóm Users khỏi danh sách tài khoản trong chính sách này.

Trong Windows Server, chỉ Local Service và administrators có đặc quyền thay đổi múi giờ.
Trong Hyper-V Server và Windows Server Core, bạn có thể đặt múi giờ bằng tiện ích sconfig tích hợp sẵn.
TZUtil.exe: Cách thay đổi múi giờ trong Windows 10 CMD?
Để thay đổi múi giờ trong Windows 11/10/8.1 và Windows Server 2019/2016/2012 R2/, một công cụ dòng lệnh đặc biệt tzutil.exe (Windows Time Zone Utility) được sử dụng. Nó lần đầu xuất hiện trong Windows 7. File thực thi của công cụ nằm trong thư mục %WINDIR%\System32.
Hãy xem xét các tính năng và khả năng của công cụ TZUtil.exe.
Chạy command prompt (cmd.exe). Để biết múi giờ hiện tại và định danh của nó (TimeZoneID), chạy lệnh:
tzutil /g

Trong ví dụ này, Pacific Standard Time là định danh múi giờ hiện tại.
Hiển thị danh sách tất cả múi giờ có sẵn như sau:
tzutil /l

Danh sách đầy đủ múi giờ hiện tại trong Windows từ Microsoft có tại đây https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones.
Nếu bạn muốn nhanh chóng tìm tất cả múi giờ có sẵn (ví dụ, với độ lệch UTC -6), hãy chạy lệnh:
tzutil /l | find /I "utc-06"

Thay đổi múi giờ hiện tại thành (UTC-05:00) Eastern Time (US & Canada):
tzutil /s "Eastern Standard Time"

Múi giờ hiện tại được lưu trong Windows registry. Bạn có thể kiểm tra nó đã thay đổi như sau:
reg query HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Để tắt giờ mùa hè cho một múi giờ cụ thể, bạn phải chỉ định định danh múi giờ với hậu tố _dstoff, ví dụ:
tzutil /s “Central European Standard Time_dstoff”
Lệnh này sẽ thay đổi múi giờ của máy tính và tắt việc thay đổi giờ theo mùa.
Bạn có thể hiển thị thông tin hoàn chỉnh về cài đặt múi giờ và giờ mùa hè như sau:
w32tm /tz
Time zone: Current:TIME_ZONE_ID_UNKNOWN Bias: 480min (UTC=LocalTime+Bias) [Standard Name:"Pacific Standard Time" Bias:0min Date:(unspecified)] [Daylight Name:"Pacific Standard Time" Bias:0min Date:(unspecified)]

Để thay đổi múi giờ từ command prompt trong Windows XP và Windows Server 2003, bạn phải sử dụng các lệnh sau
RunDLL32.exe shell32.dll,Control_RunDLL timedate.cpl,,/Z Central America Standard Time
hoặc:
Control.exe TIMEDATE.CPL,,/Z Central America Standard Time
Thiết lập múi giờ Windows qua PowerShell
Bạn có thể lấy cài đặt múi giờ hiện tại từ console PowerShell. Chạy lệnh:
[TimeZoneInfo]::Local
Hoặc
Get-TimeZone
Id : Pacific Standard Time
DisplayName : (UTC-08:00) Pacific Time (US & Canada)
StandardName : Pacific Standard Time
DaylightName : Pacific Standard Time
BaseUtcOffset : -08:00:00
SupportsDaylightSavingTime : False

Để xem tất cả múi giờ có sẵn trong Windows, bạn có thể sử dụng lệnh PowerShell:
[System.TimeZoneInfo]::GetSystemTimeZones()
hoặc
Get-TimeZone -ListAvailable

Danh sách múi giờ khá dài. Để tìm tên múi giờ cần thiết, sử dụng tùy chọn lọc PowerShell:
Get-TimeZone -ListAvailable | Where-Object {$_.displayname -like "*canada*"}
hoặc:
Get-TimeZone -ListAvailable | Where-Object {$_.Id -like "*euro*"}

Bạn có thể liệt kê tất cả múi giờ theo thứ tự bảng chữ cái:
Get-TimeZone -ListAvailable | Select Id | Sort Id
Để thay đổi múi giờ hiện tại từ PowerShell, chạy lệnh
Set-TimeZone -Name "US Eastern Standard Time"
PowerShell phiên bản 5.1 được sử dụng trong các ví dụ này, nhưng chúng cũng hoạt động trong các phiên bản mới hơn.
Cấu hình múi giờ bằng Group Policy
Bạn có thể sử dụng Group Policy để cấu hình múi giờ trên máy tính trong domain Active Directory. Không có tham số chính sách tích hợp sẵn trong GPO để cấu hình múi giờ. Hai tùy chọn phổ biến nhất để đặt múi giờ qua GPO là sử dụng script logon GPO hoặc bằng cách nhập cài đặt múi giờ vào registry.
Để đặt múi giờ bằng script logon GPO, bạn có thể sử dụng script PowerShell đơn giản (hoạt động cho tất cả phiên bản Windows từ Windows XP và Windows Server 2003):
$timeZone = "Central Europe Daylight Time"
$WinOSVerReg = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$WinOSVer = $WinOSVerReg.GetValue("CurrentVersion")
if ($WinOSVer -GE 6){
tzutil.exe /s $timeZone
} Else {
$params = "/c Start `"Change timeZone`" /MIN %WINDIR%\System32\Control.exe TIMEDATE.CPL,,/Z "
$params += $timeZone
$proc = [System.Diagnostics.Process]::Start( "CMD.exe", $params )
}
Cách khác để đặt múi giờ cho máy tính tham gia domain là nhập nội dung khóa registry HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation từ máy tính tham chiếu với cài đặt thời gian được cấu hình đúng sang các máy tính khác qua GPO. Bài viết này mô tả cách nhập tham số registry qua Group Policy.
Chọn khóa registry này với tất cả tham số bằng Registry Browser. Kết quả là tất cả cài đặt múi giờ sẽ được nhập vào trình chỉnh sửa GPO (Computer Configuration → Preferences → Windows Settings → Registry).

Nếu bạn muốn sử dụng cài đặt múi giờ khác nhau cho các site Active Directory khác nhau, hãy sử dụng Item Level Targeting của GPP để nhắm cài đặt múi giờ cụ thể đến site AD.

Nếu bạn đang sử dụng cơ sở hạ tầng RDS, và người dùng và máy chủ RDSH được cấu hình với múi giờ khác nhau, thì thời gian máy chủ sẽ được hiển thị trong phiên RDP của người dùng. Điều này không tiện lợi. Bạn có thể chuyển hướng múi giờ cục bộ của người dùng sang phiên RDP bằng tham số GPO Allow time zone redirection (Computer Configuration → Policies → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Device and Resource Redirection.
Không thể thay đổi múi giờ trên Windows Server 2019 /Windows 10: You Do Not Have Permission
Windows Server 2019 RTM và một số bản build Windows 10 chứa lỗi khó chịu với cài đặt múi giờ qua GUI. Nếu bạn cố gắng thay đổi múi giờ từ ứng dụng Settings hiện đại hoặc qua applet Control Panel kinh điển, lỗi xuất hiện:
Date and time Unable to continue. You do not have permission to perform this task. Please contact your computer administrator for help.

Trước hết, hãy đảm bảo rằng bạn đăng nhập Windows dưới tài khoản có đặc quyền administrator và nhóm Administrators có mặt trong cài đặt chính sách bảo mật cục bộ Change Time Zone.

Làm giải pháp thay thế, trong trường hợp này, bạn sẽ phải thay đổi múi giờ từ dòng lệnh:
tzutil /l
tzutil /s "Central Europe Standard Time"
hoặc PowerShell:
GetTimeZone -ListAvailable|? DisplayName -like "*Berlin*"|Set-TimeZone
Nếu bạn muốn thay đổi cài đặt múi giờ từ giao diện đồ họa, bạn cần chạy applet timedate.cpl từ command prompt với quyền cao hoặc mở nó từ Server Manager (Local Server → Time zone).

Múi giờ trong hộp thư Exchange (Microsoft 365) được đặt khi kết nối đầu tiên theo cài đặt hồ sơ người dùng Windows.