Unix中shell脚本中的YYYYMMDD日期操作

时间:2014-05-06 20:02:10

标签: shell date unix format solaris

我的日期格式为“YYYYMMDDHH”,我想从中添加或减去小时数。 GNU日期(日期-d选项)就像Linux中的魅力一样,但在非GNU环境中不能像Solaris那样。有人可以帮助我如何做到这一点吗?

2 个答案:

答案 0 :(得分:1)

以防万一有人在这里寻找上述“非GNU日期”问题的答案:以下问题更合适,答案很好:Date computations without GNU tools

答案 1 :(得分:1)

您应该检查您的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版本的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