在AIX 5.0中添加30分钟Time to DateTime格式YYYY-MM-DD hh:mm:ss

时间:2017-08-14 11:22:28

标签: ksh aix

我正在使用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上工作。

4 个答案:

答案 0 :(得分:1)

尝试

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

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

date内部调用会将D1解析为日期,并以date的“原生”格式显示。

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

此输出将与+ 30 minutes一起用于创建您想要的日期,并且外部到目前为止。

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

答案 1 :(得分:0)

date -d @$(($(date -d "$D1" +%s) + 30 * 60)) +%H:%M
  • $(date -d "$D1" +%s)回应时代
  • $((epoch + value))计算所需时间
  • date -d@epoch +fmt格式化

答案 2 :(得分:0)

Awk解决方案:

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

使用awk的{​​{1}}功能将日期转换为日期字符串。添加30分钟(30 * 60),然后使用strftime将所需格式转换回日期字符串。

答案 3 :(得分:0)

如果从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,这可能会失败,所以如果你一直需要第二个精度,你应该使用其他方法。