我在服务器上工作solaris
,但date -d
没有该选项。gdate
也没有。
这是我在 Linux 上工作的内容:
date -d "$hr:$mi $duration minutes" +'%H%M'
其中$hr
和$mi
是小时和分钟,$duration
以分钟为单位。
当我在 Linux 中这样运行时,我得到:
date -d "23:28 60 minutes" +'%H%M'
0028
当我在 中运行它时solaris
,我得到:
date: illegal option -- d Usage: date [-u] ...
awk
由于我的年龄已经很大了,这里有解决办法吗perl
?
重新报价,我遇到了同样的问题这里,只是我没有奢侈的使用date -d
。我需要一件内衬python
或perl
。
答案1
有一个小困难:拆分“:”周围,有一个 awk 函数:split(what,where,sep)
。
我在Solaris上尝试过(这是一个单行命令)
echo 23:28 60 |
awk '{split($1,H,":") ; printf "%2d:%02d\n",H[1]+(H[2]+$2)/60, (H[2]+$2)%60 }'
在哪里
- split($1,H,":") 将在 H[1] 中放入 23,在 H[2] 中放入 28
使用
echo 23:28 60 |
awk '{split($1,H,":") ; printf "%2d:%02d\n",(H[1]+(H[2]+$2)/60)%24, (H[2]+$2)%60 }'
保持在 0-23 范围内一小时。更改 printf 中的格式字符串以"%02d:%02d\n"
使其具有前导0
答案2
使用 awk,您可以执行以下操作:
awk -v dayt="2017 11 10 23 28 23" '{tmstmp=mktime(dayt)+60;print strftime("%M:%S",tmstmp)}' <<< ""
使用 -v 标志将完整日期和时间传递给 awk,然后使用 awk mktime 获取日期/时间的数字表示形式,添加 60,然后添加 strftime 将表示形式转换为所需的格式。
答案3
这是一个实验性的 hack,但适用于现代版本的bash
.我在 CentOS 7 和 Fedora 26 上测试过
#!/bin/bash
hr="23"
mi="28"
duration="60"
printf '%(%H%M)T\n' "$((-(19 * 60 * 60) + (hr * 60 * 60) + (mi * 60) + (duration * 60) ))"
结果是0028
.