macOS 时间显示格式可通过 AppleScript 调用 defaults write 修改 NSGlobalDomain 中的 AppleTimeFormat(设为 2)、AppleICUUse24HourClock(设为 true)和 AppleClockFormat(设为 "seconds" 或 "none"),并执行 killall SystemUIServer 刷新;同步时间可使用 sntp -sS time.apple.com。

macOS 系统时间显示格式(如 12 小时制/24 小时制、是否显示秒、是否显示星期等)由系统偏好设置中的“语言与地区”和“日期与时间”共同控制,但 AppleScript 无法直接调用这些 UI 设置。不过,可通过修改系统默认的 区域格式偏好(locale preferences) 和 NSLocale 的默认行为 来间接影响时间显示——更可靠且被 macOS 官方支持的方式是使用 defaults write 命令配合 AppleScript 执行。
修改为 24 小时制(不带 AM/PM)
该设置实际存储在用户的 NSGlobalDomain 中,对应键为 AppleICUDateFormatStrings,但更稳定的做法是设置 AppleTimeFormat 和 AppleICUUse24HourClock:
- AppleTimeFormat = 2 表示启用 24 小时制(值为 1 是 12 小时制)
- AppleICUUse24HourClock = YES 强制 ICU 使用 24 小时格式(推荐同时设置)
AppleScript 示例:
do shell script "defaults write NSGlobalDomain AppleTimeFormat -int 2" do shell script "defaults write NSGlobalDomain AppleICUUse24HourClock -bool true" do shell script "killall SystemUIServer" -- 刷新菜单栏时钟
隐藏秒数或显示秒数
系统时钟默认不显示秒,但可通过修改 AppleClockFormat 控制:
在 macOS 上通过命令行管理 Apple Calendar 事件——创建、更新、删除、搜索、导出及检查空闲时间,并提供完整的 JSON 输出供代理使用。
- 设为
"seconds"可在菜单栏时钟中显示秒(需重启 SystemUIServer) - 设为
"none"或删除该键则隐藏秒(默认行为)
AppleScript 示例(显示秒):
do shell script "defaults write NSGlobalDomain AppleClockFormat -string 'seconds'" do shell script "killall SystemUIServer"
同步系统时间并启用自动设置
若脚本还需确保时间准确,可调用系统内置的网络时间服务:
- 启用“自动设置日期与时间”:写入
Active为true到/var/db/timed.plist(需管理员权限) - 手动触发时间同步:使用
sntp -sS time.apple.com(无需密码,但需联网)
AppleScript 示例(仅同步,不改设置):
try
do shell script "sntp -sS time.apple.com" with administrator privileges
on error errMsg
display alert "时间同步失败:" & errMsg
end try
注意事项与限制
这些修改作用于当前用户,不影响其他账户;部分设置(如星期显示)由区域格式决定,需配合 AppleLocale 修改(例如设为 en_US@calendar=gregorian),但更改 locale 可能影响数字/货币格式,建议谨慎使用。所有 defaults write 操作后,务必执行 killall SystemUIServer 或注销重登才能生效。

















