【问题标题】:YYYYMMDDHH date manipulation in shell script in Unix [duplicate]Unix中shell脚本中的YYYYMMDDHH日期操作[重复]
【发布时间】:2014-05-06 20:02:10
【问题描述】:

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

【问题讨论】:

  • 你疯了吗?为什么是-1?我正在寻找 shell 脚本中的答案,而该答案给出了 TCL 或 perl 等……只是想通过投反对票来成为英雄?你会得到什么?
  • 可能有人投了反对票,因为它不是编程问题,因此与本网站无关。事实上,看起来有人已经在unix.stackexchange.com 上回答了一个非常相似的问题。
  • 感谢 dg99。你的回答很有帮助。

标签: shell date unix format solaris


【解决方案1】:

您应该检查gdate 是否尚未安装在您的Solaris 版本下(可能位于/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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 2010-09-05
      • 2014-06-11
      • 1970-01-01
      • 2017-08-11
      • 2023-03-14
      • 1970-01-01
      • 2018-12-23
      相关资源
      最近更新 更多