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

在KSH中将字符串转为日期并实现日期比较的技术问询

KSH日期读取与比较的正确实现

你的代码主要存在几个核心问题:

  1. 变量赋值时expD =...多了空格,KSH里变量赋值的等号前后不能有空格
  2. 不能直接把输入的字符串当作命令执行,必须用date命令解析输入的日期字符串
  3. 用%d-%m-%Y格式直接比较日期会出现逻辑错误(比如01-12-2023字符串比30-11-2023小,但实际日期是12月1日更晚),建议转成YYYYMMDD格式再做比较

下面是修正后的完整代码:

# 读取用户输入的日期(示例输入:31-12-2023)
read expdate

# 将当前日期转为YYYYMMDD格式,方便直接做数值比较
today=$(date +"%Y%m%d")

# 把输入的日期字符串转成YYYYMMDD格式(适用于GNU date环境,比如Linux)
expD=$(date -d "$expdate" +"%Y%m%d")

# 如果是BSD date环境(比如macOS),替换成下面这行赋值:
# expD=$(date -j -f "%d-%m-%Y" "$expdate" +"%Y%m%d")

# 执行日期比较,-gt表示数值大于
if [ "$today" -gt "$expD" ]; then
    echo "当前日期晚于过期日期"
else
    echo "当前日期未超过过期日期"
fi

额外实用提示:

如果需要确保用户输入格式正确,可以提前做格式校验(以dd-mm-yyyy为例):

if [[ ! "$expdate" =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]]; then
    echo "输入格式错误,请使用dd-mm-yyyy格式"
    exit 1
fi

另外原代码中if [today -gt expD]的错误在于:没有用$引用变量,且[和]前后必须保留空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:22