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

如何在带时区的date命令脚本中正确调用变量转换Unix时间戳

问题描述

需将用户输入的日期从Europe/Berlin时区转换为UTC时区的Unix时间戳,固定日期测试时命令正常运行,但读取用户输入的脚本无法正确调用变量执行转换,提示日期无效。

脚本代码:

#!/bin/bash
read -p "Datum eingeben: " date
datum=$(date -d 'TZ="UTC" $date' +%s)
echo $datum

错误信息:

date: invalid date ‘TZ="UTC" $date’
解决方法

问题核心在于单引号的使用——bash中单引号会完全屏蔽变量解析,$date被当成字面字符串而非变量值,同时时区的写法也不符合date命令规范。以下是两种可行的修正方案:

方案1:通过环境变量指定输入时区

将输入日期视为Europe/Berlin时区的时间,临时设置时区后解析并输出UTC时间戳:

#!/bin/bash
read -p "Datum eingeben: " input_date
# 临时设置时区为Europe/Berlin,解析输入日期后输出UTC时间戳
datum=$(TZ='Europe/Berlin' date -d "$input_date" +%s)
echo $datum

方案2:在日期字符串中明确指定输入时区

如果脚本运行环境的默认时区不是Europe/Berlin,推荐用这种方式明确指定输入日期的时区:

#!/bin/bash
read -p "Datum eingeben: " input_date
# 明确输入日期属于Europe/Berlin时区,转换为UTC时间戳
datum=$(date -d "$input_date Europe/Berlin" +%s)
echo $datum

关键注意点

  • 必须用双引号包裹变量,确保bash能正确解析变量的实际值
  • 时区设置要符合GNU date的语法:要么通过TZ环境变量指定,要么在日期字符串后附加时区名称
  • 避免使用date -d 'TZ="UTC" ...'这类不符合规范的写法

内容的提问来源于stack exchange,提问作者Zimon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:42:42