欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

MACOS 12 13 更改时区 修改时区 我自己亲自做的 AG chatgpt 有大用 有大大用 有大大大用

我自己亲自做的,见:  /node-admin/23177     #  OK  有大用 有大大用


   MAC 12 更改时区 修改时区 :sudo systemsetup -settimezone Asia/Shanghai      

      在 macOS Monterey(12.x)中更改时区可以通过以下步骤完成:


方法 1:通过系统设置界面

  1. 打开系统偏好设置

  • 点击屏幕左上角的 苹果菜单(🍎) > 系统偏好设置

  • 或通过 Dock 中的“系统偏好设置”图标进入。

  • 进入“日期与时间

    • 找到并点击 “日期与时间”(图标显示为日历和时钟)。

  • 解锁设置

    • 点击窗口左下角的 🔒 锁形图标,输入管理员密码解锁。

  • 更改时区

    • 点击顶部 时区 标签。

    • 在地图上点击你的位置,或在搜索框输入城市名(如 ShanghaiNew York)。

    • 或从下拉菜单中选择最近的地区。

    • 勾选 “自动设置时区”(依赖网络定位),或手动选择:

  • 保存设置

    • 关闭窗口即可自动生效。


    方法 2:通过终端命令(高级用户)

    1. 打开 终端(应用程序 > 实用工具 > 终端)。

    2. 输入以下命令查看当前时区:                

      bash            
      sudo systemsetup -gettimezone            

             

                            

      列出所有可用时区(如需要):                

      bash            
      sudo systemsetup -listtimezones            

             

                            

      更改时区(例如设为上海时区):        #  OK  有大用              

      bash            
      sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false
      sudo systemsetup -setusingnetworktime off
      sudo systemsetup -settimezone Asia/Shanghai
                 

             

                                

      需输入管理员密码。


    # sudo systemsetup -settimezone Asia/Shanghai    

    Password:    

    2025-10-08 15:31:13.864 systemsetup[1725:132221] ### Error:-99 File:/AppleInternal/Library/BuildRoots/a0876c02-1788-11ed-b9c4-96898e02b808/Library/Caches/com.apple.xbs/Sources/Admin/InternetServices.m Line:379    

    Set TimeZone: Asia/Shanghai    

    虽然报 Error:-99 的错,但是 事实上 修改时区是成功了    


       




    注意事项

    • 自动同步:如果勾选了“自动设置时区”,Mac 会通过网络定位自动调整时区(需联网)。

    • 时间同步问题:更改时区后,确保时间与服务器同步(在“日期与时间”设置中勾选 “自动设置日期与时间”)。

    • 管理员权限:手动修改时需要管理员密码。

    如果遇到问题,可以尝试重启系统或检查是否有 macOS 更新未安装。


       MAC 13 更改时区 修改时区 :          


     image.png  

      非常好的观察 👍
    你说得对 —— 在 macOS 13.5 (Ventura) 及之后的版本里,Apple 移除了旧版“地图选择时区”界面,改成了一个更简化的界面,默认只能显示“自动设置时区”,没有地图按钮。    但你仍然可以通过以下几种方式手动更改时区 👇


    🧭 方法一:关闭自动设置,再选择城市(图形界面操作)

    1. 打开 系统设置 (System Settings)

    2. 进入:通用 (General) → 日期与时间 (Date & Time)

    3. 找到 “设置时区自动使用当前位置 (Set time zone automatically using your current location)”

    • 关闭这个选项

  • 然后你会看到一个 下拉菜单或搜索栏(而不是地图)出现

    • 在里面输入城市名称(例如 “Shanghai” 或 “Beijing”)

    • 选择对应的城市

    ✅ 完成后,时区会立即更新。


    💻 方法二:使用命令行(推荐方式)

    1. 打开 终端 (Terminal)

    2. 查看当前时区:                

      sudo systemsetup -gettimezone            

             

                                                                    

    3. 查看所有可用时区:                

      sudo systemsetup -listtimezones            

             

         这会列出几十个,如:                

      Asia/Shanghai Asia/Tokyo America/New_York Europe/London            

             

                                                                    

    4. 设置中国时区:      


    5.          

      sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false
                 

         

    6. sudo systemsetup -setusingnetworktime off 

         

    7. sudo systemsetup -settimezone "Asia/Shanghai"            

             

                                                                    

    8. 验证:                

      date            

             

         输出应类似:                

      Tue Oct  7 13:45:23 CST 2025            

             

                                                                    


    ⚙️ 方法三:直接修改系统时区文件(高级)

    如果命令行被限制,也可以直接链接 /etc/localtime:  

    sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  #需重启后才生效    


           然后再执行:

       date    


           确认时间是否正确。


    要不要我帮你写一个小脚本,比如一条命令自动:

    • 设置时区为上海;

    • 同步网络时间;

    • 输出确认信息?


    AG

    sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false 

    sudo systemsetup -setusingnetworktime off 

    sudo systemsetup -settimezone Asia/Shanghai 

    详解

    你提供的命令组合用于 手动强制设置 macOS 的时区,并禁用自动时区同步功能。以下是逐条详解:


    1. 命令分解与作用

    命令 1:禁用自动时区同步

    bash    
    sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false    


    • 功能
      通过修改系统配置文件,强制关闭 macOS 的自动时区同步功能(即使图形界面中勾选了“自动设置时区”也会失效)。

    • 路径
      /Library/Preferences/com.apple.timezone.auto 是系统级配置,存储自动时区开关状态。

    • 注意
      此操作需重启或重启相关服务生效。

    命令 2:关闭网络时间同步

    bash    
    sudo systemsetup -setusingnetworktime off    


    • 功能
      禁用 macOS 与苹果时间服务器(如 time.apple.com)的自动时间同步。

    • 影响
      系统时间将不再自动校准,可能因硬件时钟误差逐渐偏移。

    命令 3:手动设置时区

    bash    
    sudo systemsetup -settimezone Asia/Shanghai    


    • 功能
      强制将时区设置为 Asia/Shanghai(上海时区,UTC+8)。

    • 依赖
      需要确保时区名称在系统中有效(可通过 sudo systemsetup -listtimezones 查看列表)。


    2. 适用场景

    • 企业/学校环境:需要统一固定时区,避免设备因地理位置变动自动切换时区。

    • 调试或开发:测试不同时区下的软件行为,需确保时区不被系统自动修改。

    • 解决冲突:当自动时区功能异常(如 GPS/网络定位失败)时手动修复。


    3. 潜在风险与注意事项

    1. 时间不同步风险

    • 关闭网络时间同步后,系统时间可能逐渐不准(依赖硬件时钟精度)。

    • 建议定期手动同步时间(如 sudo ntpdate time.apple.com)。

  • 权限问题

    • 所有命令需 sudo 权限,输入密码时确保当前账户是管理员。

  • 系统版本差异

    • macOS Ventura(13.x)及以上版本对 systemsetup 命令的限制可能更严格,推荐优先使用图形界面(系统设置 > 通用 > 日期与时间)。

  • 配置文件恢复

    • 若需重新启用自动时区,执行:

      bash                
      sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool true sudo systemsetup -setusingnetworktime on                

             


    4. 验证是否生效

    • 检查时区

      bash            
      date +"%Z %z"  # 输出应为 "CST +0800"(上海时区)            

         

    • 检查自动同步状态

      bash            
      sudo systemsetup -getusingnetworktime  # 应返回 "Network Time: Off" sudo defaults read /Library/Preferences/com.apple.timezone.auto Active  # 应返回 "0"(false)            

         


    5. 替代方案(推荐)

    如果目标是稳定设置时区而非完全禁用自动化,建议:

    1. 图形界面操作

    • 进入 系统设置 > 通用 > 日期与时间 → 关闭 “自动设置时区” → 手动选择时区。

  • 仅用终端命令

    bash            
    sudo timedatectl set-timezone Asia/Shanghai  # macOS 13+ 推荐            

       


  • 总结

    你的命令组合是一种强制手段,适用于特殊需求场景。但日常使用中,直接通过图形界面或 timedatectl 命令更安全可靠。若遇到 Error -99,仍需检查系统完整性或尝试重启服务。


    chatgpt

    sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false 

    sudo systemsetup -setusingnetworktime off 

    sudo systemsetup -settimezone Asia/Shanghai 

    详解

    下面把你贴出的三条命令逐条详解,并补充常见问题、验证方法、回滚(还原)和替代方案 —— 读完你就能清楚每条命令在做什么、为什么要这么做,以及遇到 Error:-99 / 权限限制时该怎么办。

    概要

    三条命令的目的:

    1. 关闭“自动根据位置设置时区”的系统偏好(把“自动设置时区”切掉),

    2. 关闭网络时间(NTP),

    3. 手动把系统时区设置为 Asia/Shanghai(北京时间)。
      组合起来就是把 macOS 从“自动 / 网络驱动”的时间/时区模式切换为“手动 / 固定为上海时区”。


    逐条详解

    1) sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false

    • 作用:用 defaults 写入系统级偏好(位于 /Library/Preferences)的 com.apple.timezone.auto 域,把 Active 这个键设为 false(即关闭“自动根据当前位置设置时区”)。

    • 为什么要做:如果不先关闭自动时区,系统的位置服务可能会立刻把时区改回自动值;先把自动功能关掉,手动设置时区才更可靠。

    • 实现机制defaults 实际上是修改或创建一个 plist 文件(/Library/Preferences/com.apple.timezone.auto.plist),写入布尔值 Active = 0

    • 权限:写入 /Library/Preferences 需要 root 权限,所以用 sudo

    • 验证

      • sudo defaults read /Library/Preferences/com.apple.timezone.auto
        预期看到 Active = 0 或类似输出。

      • 在图形界面:系统设置 → 通用 → 日期与时间,确认“自动设置时区/根据当前位置”已关闭(有时设置界面会覆盖这个值)。

    • 注意

      • 在企业/MDM 管理的机器上,这个值可能被策略(MDM)重写;如果是受管理设备,先确认策略设置。

      • 改完后可能需要登出/重启或重启位置服务才会立刻生效(见下面“使更改生效”的说明)。


    2) sudo systemsetup -setusingnetworktime off

    • 作用:使用 macOS 的 systemsetup 工具把“使用网络时间(NTP)”功能关掉。

    • 为什么要做:NTP 同步只负责校正系统时间(clock),并不直接修改时区,但在某些情况下同时启用 NTP 和自动时区或系统策略会造成设置冲突。关闭 NTP 可以避免因自动校时/策略导致的干扰(尤其在调试时区问题时)。

    • 验证

      • systemsetup -getusingnetworktime → 应返回 Network Time: Off(或类似)。

    • 注意

      • 关闭 NTP 会让系统时间不再自动与网络时间服务器同步,长期不推荐(除非你有其它 NTP 管理手段)。完成时区设置后,可以再次开启 systemsetup -setusingnetworktime on

      • 需要管理员权限(故使用 sudo)。


    3) sudo systemsetup -settimezone Asia/Shanghai

    • 作用:告诉系统把时区设置为 Asia/Shanghai

    • 如何确认可用时区名称:先用 systemsetup -listtimezones 查到正确的时区字符串(必须精确匹配其中的某一项)。

    • 验证

      • systemsetup -gettimezone → 应显示 Time Zone: Asia/Shanghai(或类似)。

      • date → 应显示带 CST(中国标准时间)或北京时间偏移的时间,比如 Tue Oct 7 19:08:05 CST 2025

      • ls -l /etc/localtime → (在多数 Unix/macOS 系统上)会指向相应的 zoneinfo 文件 /usr/share/zoneinfo/Asia/Shanghai(见下替代方法)。

    • 常见问题(你已经遇到的)

      • Error:-99(像你之前看到的)是常见的内部 API / 权限/受保护接口失败的提示:表面上 systemsetup 返回成功信息,但底层写入可能被 sandbox/SIP/TCC 或苹果内部 API 限制而失败 —— 常见于 Ventura(13.x)及以后版本或受管理设备。

    • 替代方法(当 systemsetup 失败时)

      • 直接替换 /etc/localtime(Unix 通常读取它决定时区):

        sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime                

                   

        然后 date 查看时间是否为北京时间。这个方法在多数情况能生效(但并非苹果官方“首选”接口)。

      • 如果系统仍然被“自动时区”或管理策略覆盖,可能需要禁用对应服务或在 MDM 控制台修改策略。


    使更改立即生效(可选)

    • 有时写入偏好后需要让相关守护进程重读配置:

      • sudo killall -HUP locationd(重启位置服务,让自动时区设置生效/失效)

      • sudo killall -HUP systemsetup —— 注意:部分守护进程名字可能不同;killall 会自动重启对应守护进程。
        这些命令会让服务重新加载配置,但使用前注意当前会话的影响(短暂的服务重启通常是安全的)。

    • 如果不放心,重启机器最稳妥(简单粗暴但可靠)。


    回滚(还原)命令

    • 恢复自动时区:

      sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool true            

             


             

      或删除自定义键:

      sudo defaults delete /Library/Preferences/com.apple.timezone.auto Active            

             


             

    • 重新开启网络时间(NTP):

      sudo systemsetup -setusingnetworktime on            

             


             

    • 若你用了 ln -sf 修改了 /etc/localtime,可以用 sudo rm /etc/localtime 然后再用 systemsetup -settimezone 或重启让系统恢复标准管理流程。


    常见场景 / 故障排查小贴士

    1. 仍被自动改回:检查是否开启了“根据当前位置自动设置时区”,或是否由 MDM/配置描述文件强制设置(用 profiles / MDM 控制台检查)。

    2. Error:-99 仍出现:说明 systemsetup 接口被受限,试替代 ln -sf 方法或在图形界面手动设置。

    3. 时钟不对(时间而不是时区):确认 NTP 是否开启并正确设置 NTP 服务器。

    4. 权限问题:确保你有管理员权限且用 sudo 运行;某些文件受 SIP(System Integrity Protection)保护,无法修改(但 /Library/Preferences 通常可写入)。


    实用一键脚本(示例,可直接运行)

    下面脚本做:关闭自动时区、关闭网络时间、设置时区、并显示验证信息(在受管理的设备上请先确认不会与策略冲突):

    #!/bin/bash set -e echo "1) 关闭自动根据位置设置时区..." sudo defaults write /Library/Preferences/com.apple.timezone.auto Active -bool false || true echo "2) 关闭网络时间(NTP)..." sudo systemsetup -setusingnetworktime off echo "3) 列出可用时区(包含 Asia/Shanghai):" systemsetup -listtimezones | grep -i "Asia/Shanghai" || true echo "4) 设置时区为 Asia/Shanghai..." sudo systemsetup -settimezone "Asia/Shanghai" || {  echo "systemsetup 设置失败,尝试用 /etc/localtime 链接替代..."  sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime } echo "验证:" systemsetup -gettimezone systemsetup -getusingnetworktime ls -l /etc/localtime || true date    



    使用方法:把上面保存为 set-shanghai-tz.sh,然后 chmod +x set-shanghai-tz.shsudo ./set-shanghai-tz.sh


    小结(要点)

    • defaults write ... Active -bool false:关掉“自动时区”偏好(location-based)。

    • systemsetup -setusingnetworktime off:关掉 NTP(网络时间)。

    • systemsetup -settimezone Asia/Shanghai:设置时区(失败时可用 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 作替代)。

    • 若机器受 MDM 管理或 macOS 新版的权限限制(SIP / TCC),某些命令会被覆盖或报错(如 Error:-99),需用替代方法或调整管理策略。


    如果你愿意,我可以:

    • 把上面脚本调整成更“守稳”的版本(例如先检测是否受 MDM 管理并提示),或者

    • 帮你分析你那台机器的实际输出(把 systemsetup -gettimezonesystemsetup -getusingnetworktimesudo defaults read /Library/Preferences/com.apple.timezone.auto 的结果发过来),我可以基于输出给出精确建议。要哪个我直接做哪个。


    sudo ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 

    与 

    sudo systemsetup -settimezone "America/Los_Angeles" 

    区别

    这两个命令都用于设置系统的时区为 America/Los_Angeles(美国洛杉矶时间),但它们的实现方式和适用场景有所不同:


    1. sudo ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

    • 作用直接通过符号链接将 /etc/localtime 文件指向时区数据库中的 Los_Angeles 文件。

    • 原理

      • /usr/share/zoneinfo/ 是系统存放时区信息的目录。

      • /etc/localtime 是系统读取当前时区的配置文件(通常是一个符号链接)。

      • 通过 ln -sf 强制覆盖链接,直接修改时区。

    • 特点

      • 底层操作:直接操作文件系统,不依赖特定工具。

      • 跨平台性适用于大多数 Linux 发行版和 Unix-like 系统(如 FreeBSD)。

      • 无依赖:不需要额外的命令行工具。

    • 注意

      • 某些系统(如现代 systemd 管理的 Linux)可能要求同步运行 timedatectl set-timezone 以更新其他配置。


    2sudo systemsetup -settimezone "America/Los_Angeles"

    • 作用:通过 macOS 专用工具 systemsetup 设置时区。

    • 原理

      • systemsetup 是 macOS 提供的系统配置工具,用于管理网络、时间、睡眠等全局设置。

      • 该命令会修改 /etc/localtime,但通过更高层的接口实现(可能还会触发其他系统服务更新)。

    • 特点

      • macOS 专用:仅适用于 macOS 系统。

      • 上层封装:相比直接操作文件,更“官方”且可能包含额外逻辑(如日志记录)。

      • 功能丰富systemsetup 还支持其他系统设置(如日期、网络时间同步等)。

    • 注意

      • 在 Linux 或其他系统中通常不可用。


    主要区别

    特性ln -sf 方法systemsetup 方法
    适用系统            Linux/Unix(通用)仅 macOS
    底层 vs 高层            直接修改文件通过系统工具封装
    依赖项            需要 macOS 的 systemsetup 工具
    扩展性            需手动处理其他配置(如 systemd 同步)可能自动触发相关服务更新

    推荐选择

    • Linux/Unix 系统:优先使用 ln -sf 或 timedatectl set-timezone(若可用)。

    • macOS 系统:建议用 systemsetup(兼容性更佳,避免意外问题)。

    现代 Linux 发行版(如 Ubuntu/CentOS)还可通过 timedatectl 管理时区:

    bash    
    sudo timedatectl set-timezone America/Los_Angeles    



    普通分类: