Solaris 中的小时和分钟添加

Solaris 中的小时和分钟添加

我在服务器上工作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。我需要一件内衬pythonperl

答案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.

相关内容