当使用谷歌云GCP的windows时候,可能服务器的时间和本地时间总是差8个小时,然而更改时区,却提示没有权限,因为登录用户不是administrator,下面是解决办法
================================
2024.6.5更新新的方法,调整时间的同时会禁用掉自动更新时间,这样防止系统会自动更新时间而导致时间又变了。
这样就可以不用设置开机重启了,只需要运行一次即可。
同时代码后面还更新了恢复自动更新时间的代码,这样后续需要调整,也可以再恢复。
下面是更新时间并禁用自动更新时间的代码
@echo off
setlocal
:: 获取当前日期和时间
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set datetime=%%a
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%
set hours=%datetime:~8,2%
set minutes=%datetime:~10,2%
set seconds=%datetime:~12,2%
:: 计算新的小时数
set /a "newhours=hours + 8"
:: 检查是否跨过午夜
if %newhours% geq 24 (
set /a "newhours-=24"
set /a "day+=1"
)
:: 检查月份天数,以确定是否需要进位到下一个月
call :AdjustDate %year% %month% %day%
:: 格式化时间以确保符合time命令的要求
if %newhours% lss 10 set newhours=0%newhours%
:: 设置系统时间和日期,这里假设你的系统使用YYYY-MM-DD格式
cmd /c date %year%-%month%-%day%
cmd /c time %newhours%:%minutes%:%seconds%
:: 禁用自动时间同步
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v Enabled /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v UpdateInterval /t REG_DWORD /d 0 /f
goto :eof
:AdjustDate
setlocal enableextensions enabledelayedexpansion
set /a "year=%1", "month=%2", "day=%3"
set "monthdays=31"
:: 调整2月的天数
if "%month%"=="02" (
set /a "leapyear=year %% 4"
if !leapyear! equ 0 (
if "%year% %% 100" neq "0" or "%year% %% 400" eq "0" set "monthdays=29" else set "monthdays=28"
) else (
set "monthdays=28"
)
)
:: 调整小月的天数
if "%month%"=="04" set "monthdays=30"
if "%month%"=="06" set "monthdays=30"
if "%month%"=="09" set "monthdays=30"
if "%month%"=="11" set "monthdays=30"
if %day% gtr %monthdays% (
set /a "day=1"
set /a "month+=1"
if %month% gtr 12 (
set /a "month=1"
set /a "year+=1"
)
)
endlocal & (
set "year=%year%"
set "month=%month%"
set "day=%day%"
)
goto :eof
下面代码是恢复自动更新时间
@echo off
setlocal
chcp 65001
:: 启用NtpClient以自动同步时间
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v UpdateInterval /t REG_DWORD /d 3600 /f
:: 启动Windows Time服务
sc start w32time
sc config w32time start= auto
echo 自动时间同步已恢复。
pause
================================
直接在任意位置创建一个bat文件,比如:UpdateTime.bat
将下面的代码放入bat中
@echo off
setlocal
:: 获取当前日期和时间
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set datetime=%%a
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%
set hours=%datetime:~8,2%
set minutes=%datetime:~10,2%
set seconds=%datetime:~12,2%
:: 计算新的小时数
set /a "newhours=hours + 8"
:: 检查是否跨过午夜
if %newhours% geq 24 (
set /a "newhours-=24"
set /a "day+=1"
)
:: 检查月份天数,以确定是否需要进位到下一个月
call :AdjustDate %year% %month% %day%
:: 格式化时间以确保符合time命令的要求
if %newhours% lss 10 set newhours=0%newhours%
:: 设置系统时间和日期,这里假设你的系统使用YYYY-MM-DD格式
cmd /c date %year%-%month%-%day%
cmd /c time %newhours%:%minutes%:%seconds%
goto :eof
:AdjustDate
setlocal enableextensions enabledelayedexpansion
set /a "year=%1", "month=%2", "day=%3"
set "monthdays=31"
:: 调整2月的天数
if "%month%"=="02" (
set /a "leapyear=year %% 4"
if !leapyear! equ 0 (
if "%year% %% 100" neq "0" or "%year% %% 400" eq "0" set "monthdays=29" else set "monthdays=28"
) else (
set "monthdays=28"
)
)
:: 调整小月的天数
if "%month%"=="04" set "monthdays=30"
if "%month%"=="06" set "monthdays=30"
if "%month%"=="09" set "monthdays=30"
if "%month%"=="11" set "monthdays=30"
if %day% gtr %monthdays% (
set /a "day=1"
set /a "month+=1"
if %month% gtr 12 (
set /a "month=1"
set /a "year+=1"
)
)
endlocal & (
set "year=%year%"
set "month=%month%"
set "day=%day%"
)
goto :eof
重要说明
- 在使用该脚本之前,请确保了解你的Windows系统的日期和时间格式。你可以通过在命令提示符下运行
date /t
和time /t
来查看当前系统的日期和时间格式。 - 如果你的系统使用的是其他日期格式,如
MM-DD-YYYY
或DD-MM-YYYY
,请在脚本中相应地调整cmd /c date
命令行的日期部分。
然后使用管理员权限运行该bat文件,即可将服务器时间直接加8
还可以将该bat文件设置为开机启动,这样无需每次手动运行
但是有个问题,该bat需要管理员权限才能够正常运行,所以一般的开机启动不行。
这里可以使用任务计划程序。
这是推荐的方法,因为它允许你指定任务以管理员权限执行,即使你登录的用户不是管理员。
- 打开任务计划程序:在开始菜单搜索“任务计划程序”并打开。
- 创建新任务:
- 在任务计划程序的右侧,点击“创建基本任务…”来启动向导。
- 输入任务的名称和描述。
- 选择“当计算机启动时”作为触发器。
- 在“操作”步骤中,选择“启动程序”,然后浏览到你的批处理文件。
- 在设置选项时,确保勾选“使用最高权限运行”。
- 保存并退出:完成向导并确保任务已启用。
然后可以尝试重启下服务器,进行测试。
到此为止。
发布者:彬彬笔记,转载请注明出处:https://www.binbinbiji.com/windows/3389.html