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

HP-UX环境Shell脚本中date转Epoch时间遇格式错误的解决方法

HP-UX下获取Epoch时间的解决办法

HP-UX自带的date属于System V版本,不支持+%s格式符,且你只能使用它的-u和-a选项,以下是几种可行的替代方案:

方案1:使用Perl(最便捷)

绝大多数HP-UX环境默认自带Perl,直接执行以下命令即可输出当前Epoch时间:

perl -e 'print time, "\n"'

方案2:用Awk手动计算

如果系统没有Perl,可以结合date -u(获取UTC时间避免时区干扰)和Awk来计算秒数。示例命令如下:

date -u | awk 'BEGIN {
    m["Jan"]=1; m["Feb"]=2; m["Mar"]=3; m["Apr"]=4; m["May"]=5; m["Jun"]=6;
    m["Jul"]=7; m["Aug"]=8; m["Sep"]=9; m["Oct"]=10; m["Nov"]=11; m["Dec"]=12
}
{
    year=$6; mon=m[$2]; day=$3; split($4, t, ":"); hour=t[1]; min=t[2]; sec=t[3]
    # 计算1970到当前年份的闰年总数
    leap=int((year-1)/4) - int((year-1)/100) + int((year-1)/400)
    # 计算总天数
    days=(year-1970)*365 + leap
    # 各月份天数(默认非闰年)
    md[1]=31; md[2]=28; md[3]=31; md[4]=30; md[5]=31; md[6]=30
    md[7]=31; md[8]=31; md[9]=30; md[10]=31; md[11]=30; md[12]=31
    # 调整闰年2月天数
    if ((year%4==0 && year%100!=0) || year%400==0) md[2]=29
    # 累加当前月份之前的所有月份天数
    for (i=1; i<mon; i++) days+=md[i]
    # 加上当月已过的天数(day-1因为1号是第0天)
    days+=day-1
    # 转换为总秒数输出
    print days*86400 + hour*3600 + min*60 + sec
}'

这段命令会解析date -u的输出,计算从1970-01-01 00:00:00 UTC到当前时间的总秒数,也就是Epoch时间。

方案3:安装GNU Date(若环境允许)

如果你的环境允许安装第三方工具,可以从GNU Coreutils编译安装GNU版本的date,安装后就能直接使用date +%s命令。但如果环境限制只能使用系统自带工具,此方案不适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:42:15