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

如何在Bash脚本中验证指定格式的带时区ISO 8601日期时间字符串

Bash校验固定时区ISO 8601日期格式方案

校验规则说明

仅接受%Y-%m-%dT%H:%M:%S+0200格式的日期字符串,语法校验规则如下:

  • 年份为任意4位数字,支持0001到9999
  • 月、日、时、分、秒均为2位数字
  • 固定使用T作为日期和时间的分隔符
  • 固定时区后缀为+0200

实现方法

使用Bash正则匹配完成校验,不需要调用系统date工具,性能更高,仅做语法层面校验:

#!/bin/bash

# 入参1:待校验的日期字符串
# 返回值:0=格式合法,1=格式不合法
is_valid_iso8601_with_tz() {
    local datetime_str="$1"
    # 正则规则:严格匹配指定格式,同时校验月/日/时分秒的数值范围
    local match_regex='^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\+0200$'
    
    [[ $datetime_str =~ $match_regex ]] && return 0 || return 1
}

# 使用示例
test_str="2024-12-31T23:59:59+0200"
if is_valid_iso8601_with_tz "$test_str"; then
    echo "输入$test_str 格式合法"
else
    echo "输入$test_str 格式不合法"
fi

简化版本(无数值范围校验)

如果不需要校验月份是否在1-12、日期是否在1-31等数值范围,仅校验字符格式和分隔符,可以使用更简单的正则:

替换正则变量为:local match_regex='^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\+0200$'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:54:05