You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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"

关键步骤说明

  1. 输入适配:自动将中文星期转换为date可识别的英文缩写,同时兼容英文星期输入
  2. 时区解析:通过TZ=Asia/Shanghai强制在UTC+8时区下解析用户输入,确保时间基准正确
  3. 时间戳转换:将解析后的时间转为Unix时间戳,避免时区直接转换的歧义
  4. 目标时区输出:切换到指定时区,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:40:15