欢迎各位兄弟 发布技术文章
这里的技术是共享的
我自己亲自做的做法是: # $time_from_aaaa 是时间戳
formatted_date_time=$(date -r $time_from_aaaa "+%m%d%H%M%Y.%S")
sudo date "$formatted_date_time"
在 macOS 中,使用 date
命令来设置系统时间需要管理员权限,并且需要使用 systemsetup
命令,因为 date
命令本身主要用于显示和解析日期/时间,而不是设置系统时间。
要设置系统时间为某个特定的时间戳,首先你需要将时间戳转换为可读的日期格式,然后使用 systemsetup
来设置系统时间。
以下是如何使用 date
和 systemsetup
命令来实现这一目标:
首先,将时间戳转换为日期格式。假设你的时间戳是 Unix 时间戳(从1970年1月1日开始的秒数),你可以使用以下命令:
-r seconds 这里-r是时间戳的意思,以时间戳的格式显示
Print the date and time represented by seconds, where seconds is
the number of seconds since the Epoch (00:00:00 UTC, January 1,
1970; see time(3)), and can be specified in decimal, octal, or hex.
Bash深色版本1 timestamp=1689322200 # 示例时间戳 2 date -r $timestamp "+%Y-%m-%d %H:%M:%S"
这会输出类似于 2024-07-14 10:30:00
这样的日期和时间。
接下来,使用 systemsetup
命令来设置系统时间。由于 systemsetup
需要管理员权限,所以你需要使用 sudo
。但是,systemsetup
不接受 date
命令的格式,而是需要 MM/DD/YYYY HH:MM:SS 的格式。因此,你需要再次格式化时间:
Bash深色版本1 timestamp=1689322200 2 formatted_date=$(date -r $timestamp "+%m/%d/%Y %H:%M:%S") 3 sudo systemsetup -settime "$formatted_date"
然而,systemsetup
命令不接受秒数,所以你需要去掉秒数部分:
下面是正确的代码
Bash深色版本1 sudo systemsetup -setusingnetworktime off #关闭网络时间同步
1 timestamp=1689322200 2 formatted_date=$(date -r $timestamp "+%m/%d/%Y %H:%M") 4 sudo systemsetup -setdate $(date -r $timestamp "+%m/%d/%Y") 5 sudo systemsetup -settime $(date -r $timestamp "+%H:%M")
请确保你有权限运行 sudo
命令,并且在执行上述命令前确认你的格式是否正确,以免设置错误的时间。
注意:在 macOS 上,通过命令行更改系统时间可能会影响 NTP 时间同步服务,如果你的计算机通常与 NTP 服务器同步时间,那么更改后可能需要禁用或重新配置 NTP 服务。在进行任何更改之前,请确保你了解所有相关的风险和后果。