小时和分钟加法
Hours and Minutes addition
我在 solaris
服务器上工作,date -d
选项不存在。也没有gdate
。我知道已经问了很多与此相关的问题,我几乎已经解决了所有问题。但是我不知道 perl
所以我不知道如何修改这些答案 w.r.t 我的要求。
这是我在 Linux 中工作的内容:
date -d "$hr:$mi $duration minutes" +'%H%M'
其中 $hr
和 $mi
是小时和分钟,$duration
是分钟。
当我 运行 在 Linux 中点赞时,我得到了这个:
date -d "23:28 60 minutes" +'%H%M'
0028
如何获得适用于 Solaris
的 perl
等价物(可能是一个衬垫?)?
编辑:添加 awk
标签以查看是否有解决方案,因为我的 perl
很古老。伙计们,感谢您的帮助。
编辑 (2):我遇到了与 here 相同的问题,只是我没有使用 date -d
的奢侈。我对 python
或 perl
中的任何解决方案持开放态度,不必是一个班轮。
PS:也检查了 This, no tclsh
. Checked This,不知道那里发生了什么!
Solaris 在很多方面都落后于时代。它的 date
命令缺少一堆东西,比如处理 Linux 风格的 -d
选项或 BSD 风格的 -v
选项的能力。 Solaris 的 strftime()
缺少一堆东西(这会影响可用的日期格式),perl 很古老,awk 很古老...
多年来我一直在 Solaris 上使用以下 hack,以获得当前纪元秒:
truss /usr/bin/date 2>&1 | awk '/^time/{print $NF}'
据我所知,使用任何 POSIX 工具都不可能转换为另一种方式,但由于您可以使用 perl,因此以下方法可能有效:
perl -le 'print scalar localtime $ARGV[0]' 1510329000
在双向进行此转换后,您可以对其进行数学运算以调整日期。例如:
$ date
Fri Nov 10 10:24:31 EST 2017
$ now=$( truss /usr/bin/date 2>&1 | awk '/^time/{print $NF}' )
$ then=$( perl -le 'print scalar localtime $ARGV[0]' $((now+3600)) )
$ echo "$then"
Fri Nov 10 11:24:46 2017
为了将任意 GMT date/times 转换为纪元秒,我在多年前继承了以下 bash 代码。 YMMV.
# Use whatever process you like to populate these variables.
# Note that since epoch zero was at midnight GMT, this time is GMT as well.
read year month day hour minute second <<<"2017 11 10 15 50 00"
if [[ $month -gt 2 ]]; then
(( month++ ))
else
(( month+=13 ))
(( year-=1 ))
fi
day=$(( (year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day ))
days_since_epoch=$(( day-719591 )) # this seems to be close to Jan 1 1970
seconds_since_epoch=$(( (days_since_epoch*86400)+(hour*3600)+(minute*60)+second ))
echo "epoch: $seconds_since_epoch"
此代码的大部分内容用于计算闰年和秒数。我没有深入研究神奇数字的起源,但由于结果似乎有效,我不会质疑它们。 :)
要从 perl 中获取小时和分钟,如您在问题中所示,您可以使用以下代码:
perl -le 'my ($h,$m) = (localtime($ARGV[0]))[2,1]; printf("%02d%02d\n",$h,$m);' 1510329000
或
perl -le 'use POSIX "strftime"; print strftime("%H%M", localtime($ARGV[0]));' 1510329000
使用Solaris这样经典的操作系统是不是很开心?
另请参阅:
我在 solaris
服务器上工作,date -d
选项不存在。也没有gdate
。我知道已经问了很多与此相关的问题,我几乎已经解决了所有问题。但是我不知道 perl
所以我不知道如何修改这些答案 w.r.t 我的要求。
这是我在 Linux 中工作的内容:
date -d "$hr:$mi $duration minutes" +'%H%M'
其中 $hr
和 $mi
是小时和分钟,$duration
是分钟。
当我 运行 在 Linux 中点赞时,我得到了这个:
date -d "23:28 60 minutes" +'%H%M'
0028
如何获得适用于 Solaris
的 perl
等价物(可能是一个衬垫?)?
编辑:添加 awk
标签以查看是否有解决方案,因为我的 perl
很古老。伙计们,感谢您的帮助。
编辑 (2):我遇到了与 here 相同的问题,只是我没有使用 date -d
的奢侈。我对 python
或 perl
中的任何解决方案持开放态度,不必是一个班轮。
PS:也检查了 This, no tclsh
. Checked This,不知道那里发生了什么!
Solaris 在很多方面都落后于时代。它的 date
命令缺少一堆东西,比如处理 Linux 风格的 -d
选项或 BSD 风格的 -v
选项的能力。 Solaris 的 strftime()
缺少一堆东西(这会影响可用的日期格式),perl 很古老,awk 很古老...
多年来我一直在 Solaris 上使用以下 hack,以获得当前纪元秒:
truss /usr/bin/date 2>&1 | awk '/^time/{print $NF}'
据我所知,使用任何 POSIX 工具都不可能转换为另一种方式,但由于您可以使用 perl,因此以下方法可能有效:
perl -le 'print scalar localtime $ARGV[0]' 1510329000
在双向进行此转换后,您可以对其进行数学运算以调整日期。例如:
$ date
Fri Nov 10 10:24:31 EST 2017
$ now=$( truss /usr/bin/date 2>&1 | awk '/^time/{print $NF}' )
$ then=$( perl -le 'print scalar localtime $ARGV[0]' $((now+3600)) )
$ echo "$then"
Fri Nov 10 11:24:46 2017
为了将任意 GMT date/times 转换为纪元秒,我在多年前继承了以下 bash 代码。 YMMV.
# Use whatever process you like to populate these variables.
# Note that since epoch zero was at midnight GMT, this time is GMT as well.
read year month day hour minute second <<<"2017 11 10 15 50 00"
if [[ $month -gt 2 ]]; then
(( month++ ))
else
(( month+=13 ))
(( year-=1 ))
fi
day=$(( (year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day ))
days_since_epoch=$(( day-719591 )) # this seems to be close to Jan 1 1970
seconds_since_epoch=$(( (days_since_epoch*86400)+(hour*3600)+(minute*60)+second ))
echo "epoch: $seconds_since_epoch"
此代码的大部分内容用于计算闰年和秒数。我没有深入研究神奇数字的起源,但由于结果似乎有效,我不会质疑它们。 :)
要从 perl 中获取小时和分钟,如您在问题中所示,您可以使用以下代码:
perl -le 'my ($h,$m) = (localtime($ARGV[0]))[2,1]; printf("%02d%02d\n",$h,$m);' 1510329000
或
perl -le 'use POSIX "strftime"; print strftime("%H%M", localtime($ARGV[0]));' 1510329000
使用Solaris这样经典的操作系统是不是很开心?
另请参阅: