在Unix脚本中使用YYYYMMDDHHdate操作

我有一个格式为“YYYYMMDDHH”的date,我想从中增加或减去小时。 GNUdate(date-d选项)在Linux中像一个魅力,但不能像Solaris那样在非GNU env中这样做。 有人能帮助我,我怎么能做到这一点?

您应该检查在您的Solaris发行版中是否已经安装了gdate (可能位于/usr/gnu/bin/date/usr/sfw/bin/[g]date/usr/local/bin/[g]date/usr/csw/bin/[g]date或只是/usr/bin/gdate具体取决于版本)。 如果没有,应该很容易找到一个包含GNU日期的包并安装它。

无论如何,这里是一个shell函数,应该在一个股票的Solaris发行版下工作,并做我认为你想要的:

 f() { echo $1 | perl -MTime::Local -nle ' use POSIX 'strftime'; $op='$2'*3600; $sec=timelocal(0,0,$4,$3,$2-1,$1) if /(\d{4})(\d{2})(\d{2})(\d{2})/; $sec=$sec+$op; print strftime "%Y%m%d%H\n", localtime($sec);' } 

 $ f 2014010112 -24 2013123112 

正因如此,如果有人在这里寻找回答上面的“非GNU日期”问题:下面的问题是更好的答案: 不使用GNU工具的日期计算