如何在Bash中实现UTC+8时间至指定UTC偏移时区的转换
Bash脚本:将UTC+8的时间/星期转换为指定时区时间
核心思路
利用GNU date命令的时区支持,先将输入的UTC+8时区时间(结合星期)解析为Unix时间戳,再切换到目标时区输出对应的日期时间。
完整脚本实现
#!/bin/bash # 交互式获取输入 read -p "输入UTC+8时区的星期和时间(格式:周一 14:30 或 Mon 14:30): " input_content read -p "输入目标时区偏移(如UTC-5、UTC+3,也支持时区名称如America/New_York): " target_tz # 处理中文星期转英文适配 raw_weekday=$(echo "$input_content" | awk '{print $1}') case $raw_weekday in 周一) weekday="Mon" ;; 周二) weekday="Tue" ;; 周三) weekday="Wed" ;; 周四) weekday="Thu" ;; 周五) weekday="Fri" ;; 周六) weekday="Sat" ;; 周日) weekday="Sun" ;; *) weekday=$raw_weekday ;; esac # 提取时间部分 time_segment=$(echo "$input_content" | awk '{print $2}') # 在UTC+8时区下解析输入,生成时间戳 timestamp=$(TZ=Asia/Shanghai date -d "$weekday $time_segment" +%s) # 切换目标时区,输出格式化结果 TZ="$target_tz" date -d "@$timestamp" "+%Y-%m-%d %H:%M:%S %Z"
关键步骤说明
- 输入适配:自动将中文星期转换为
date可识别的英文缩写,同时兼容英文星期输入 - 时区解析:通过
TZ=Asia/Shanghai强制在UTC+8时区下解析用户输入,确保时间基准正确 - 时间戳转换:将解析后的时间转为Unix时间戳,避免时区直接转换的歧义
- 目标时区输出:切换到指定时区,用
date格式化输出完整的日期、时间和时区标识
使用示例
# 输入示例 输入UTC+8时区的星期和时间(格式:周一 14:30 或 Mon 14:30): 周一 14:30 输入目标时区偏移(如UTC-5、UTC+3,也支持时区名称如America/New_York): UTC-5 # 输出示例 2024-05-20 01:30:00 UTC-05
注意事项
- 确保系统使用GNU
date(Linux默认支持,macOS需安装coreutils并替换为gdate) - 目标时区支持两种格式:偏移格式(如
UTC-5)或时区名称(如Europe/London) date默认会匹配最近的对应星期(比如当前是周三,输入周一则取过去的周一,输入周日则取即将到来的周日),若需固定取未来/过去的星期,可在输入前添加next或last(如next 周一 14:30)
内容的提问来源于stack exchange,提问作者Alyx
相关产品推荐
相关产品推荐

