如何在Bash中将RTC输出字符串转换为timedatectl所需时间格式?
转换RTC时间格式适配timedatectl设置需求
你可以通过拆分字段后重新拼接的方式实现格式转换,直接修改你的脚本即可:
#!/usr/bin/env bash # 读取RTC数据并提取目标时间字符串 TIME=$(i2cdump -r 0-6 -y 0 0x68 b) TIME_STR=${TIME:76:20} # 将空格分隔的字段拆分到单独变量中 read SEC MIN HOUR DAY DATE MONTH YEAR <<< "$TIME_STR" # 拼接为timedatectl要求的格式:'YYYY-MM-DD HH:MM:SS' # 注:这里将两位年份补全为四位(如22→2022),若RTC输出四位年份可直接用$YEAR FORMATTED_TIME="20${YEAR}-${MONTH}-${DATE} ${HOUR}:${MIN}:${SEC}" # 执行时间设置(需要sudo权限) sudo timedatectl set-time "$FORMATTED_TIME"
关键步骤说明:
- 用
read命令把空格分隔的原始时间字符串拆分成SEC/MIN/HOUR/DAY/DATE/MONTH/YEAR七个单独变量,方便自由调整顺序 - 按照
年份-月份-日期 小时:分钟:秒的目标格式拼接字符串,日期部分用连字符分隔,时间部分用冒号分隔 - 由于你的RTC输出的是两位年份(如22),这里手动补全为四位(2022);如果你的RTC支持输出四位年份,直接替换为
"${YEAR}-${MONTH}-${DATE} ${HOUR}:${MIN}:${SEC}"即可 timedatectl set-time需要管理员权限,执行脚本时要加sudo或者以root身份运行
内容的提问来源于stack exchange,提问作者earl
相关产品推荐
相关产品推荐

