【问题标题】:Add 30 Mins Time to DateTime format YYYY-MM-DD hh:mm:ss in AIX 5.0在 AIX 5.0 中添加 30 分钟时间到 DateTime 格式 YYYY-MM-DD hh:mm:ss
【发布时间】:2018-01-22 05:26:54
【问题描述】:

我正在使用 coreutils 5.0 运行 AIX。我需要提前一个符合 ISO-8601 格式 YYYY-MM-DD hh:mm:ss 的任意日期(或时间)。

例如:

D1的值为:2017-07-08 19:20:01,我需要加30分钟。

在现代 UNIX 系统中,我可能会写出类似的东西

date -d "$D1 + 30 minutes" +'%H:%M'

但是,唉,我需要它才能在旧 AIX 上工作。

【问题讨论】:

  • 你刚才不是问过类似的问题吗?

标签: ksh aix


【解决方案1】:

awk 解决方案:

awk -F '[-: ]' '{
    ram=(mktime($1" "$2" "$3" "$4" "$5" "$6)+(30*60));
    print strftime("%Y-%m-%d %T",ram) 
}' <<< "$D1"

使用awkmktime 函数将日期转换为日期字符串。添加 30 分钟 (30*60),然后使用 strftime 转换回具有所需格式的日期字符串。

【讨论】:

  • 如果您只是要连接所有字段,那么将拆分器 gsub 分开不是更容易吗?
【解决方案2】:

如果您从 2003 年开始运行 AIX,那么您将陷入困境,我的朋友,但如果您只需要 时间,而不是完整日期,正如您的问题所暗示的那样,我认为 @RamanSailopal 得到了我们到了一半。

echo $D1 | awk -F "[: ]" '{
    m = $3+30;
    h = ($2+int(m/60)) % 24;
    printf("%02i:%02i\n", h, m%60)
}'

awk 将输入拆分到不同的字段中,拆分模式在 -F 参数中给出。该模式表示: 或空格

输入将被拆分

$1 = 2017-07-08
$2 = 19
$3 = 20
$4 = 01

然后脚本计算一个假的分钟值(可以大于或等于 60)并将其存储在m 中。它根据该值计算小时,模 24,以及实际分钟,m 模 60。

如果您点击leap second,这可能会失败,因此如果您始终需要秒精度,您应该使用其他方法。

【讨论】:

    【解决方案3】:
    date -d @$(($(date -d "$D1" +%s) + 30 * 60)) +%H:%M
    
    • $(date -d "$D1" +%s) 呼应时代
    • $((epoch + value)) 计算所需时间
    • date -d@epoch +fmt 格式化它

    【讨论】:

    • 解释为什么这能满足问题的需要,不要只是转储代码。
    • @jwenting 应该很明显了,但是我们开始:$(date -d "$D1" +%s) 回显时代,$((epoch + value)) 计算他的时间想要, date -d@epoch +fmt 格式化它。
    【解决方案4】:

    试试

    $ date -d "$(date -d "$D1") + 30 minutes" +'%H:%M'
    

    这适用于bash,但不适用于ksh


    dateinner 调用会将D1 解析为日期,并以date 的“本机”格式呈现。

    $ date -d "$D1"
    Sat Jul  8 19:20:01 CEST 2017
    

    此输出将与 + 30 minutes 一起使用以创建您想要的日期,并使用 outer 调用日期。

    date的内部调用将被扩展,以便

    $ date -d "$(date -d "$D1") + 30 minutes" +'%H:%M'
    

    将等同于

    $ date -d "Sat Jul  8 19:20:01 CEST 2017 + 30 minutes" +'%H:%M'
    

    这将是

    19:50
    

    【讨论】:

    • 我收到此错误:日期:非法选项 -- d 用法:日期 [-u] [+字段描述符] 与 POSIX 标准相关的内容。我基本上是在运行一个 KSH 文件。
    • 你使用的是什么版本的date
    • 版本显示 AIX,DATE(1) 日期 (coreutils) 5.0(2003 年 3 月)DATE(1)
    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2015-10-08
    • 2013-09-14
    • 2013-03-21
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多