Shell中的日期转换(Sun OS)

时间:2016-03-31 19:33:11

标签: shell sunos

cur_date=`date +"%m/%d/%Y"`         (Output    04/01/2016)                                          
cur_day=`date +"%a"`                (Output    Fri)

我想从上面的命令创建一个新问题 但我也想要

cur_day = cur_date +“X”

我需要有人帮我“X”。

2 个答案:

答案 0 :(得分:1)

我会将当前日期转换为自the Unix epoch以来的秒数,将我需要偏置的天数加上86,400¹,然后将其转换回人类可读的日期。

Solaris 11(又名SunOS 5.11)date(1)程序可以通过date '+%s'执行第一部分,POSIX shell可以执行算术运算(例如echo $(($(date '+%s') + 3 * 86400))),但是Solaris版本的date无法将该日期秒值转换回人格式的日期.³

如果您的系统GNU date安装为gdate(如Solaris 11那样),您可以关闭最后一个差距:

$ gdate -d @$(($(gdate '+%s') + 3 * 86400)) '+%m/%d/%Y'

这给出了“3天后”的人格式版本。

不幸的是,Solaris 10(a.k.a. SunOS 5.10)没有预装GNU工具。如果您不愿意安装它们,您将需要一个不同的解决方案。

在Solaris 10及更新版本上工作的方法是使用Perl,它可以在一行中执行相同的操作:

$ perl -MPOSIX -e 'print strftime("%m/%d/%Y", localtime(time + 3 * 86400)), "\n"'

这可能早于Solaris9.⁴

如果您需要更复杂的日期操作,我建议使用Perl Date::Manip模块。它非常强大。它是用大锤狩猎蝴蝶,但是你可以用Perl单行程中的Date::Manip来做上述事情:

$ perl -MDate::Manip -e 'print UnixDate(DateCalc("now", "3d"), "%m/%d/%Y\n")'

<强>脚注

  1. 86,400是正常日期的秒数。您可能认为使用该常量的上述解决方案在leap seconds面前无法正常工作,但由于您要求的是几天内的准确性,可能无关紧要

    唯一重要的是你的脚本是在闰秒调整的确切秒数运行,这通常发生在午夜UTC + 0。在北美,这通常是在营业时间之后。有些网站将闰秒调整移至更方便的时间,例如当地时间凌晨2点。如果您的脚本没有在那个确切的瞬间运行,闰秒不会影响它。

    这些调整每隔几年才会发生一次,并且调整时间会提前几个月公布,因此如果您的脚本必须在那时完全运行并且其答案必须包含闰秒调整,您可以计划调整。 / p>

  2. 所有版本的Solaris都包含POSIX shell,因为POSIX早于Solaris 1.0。

  3. 至少在Solaris 11中也是如此,因为它与POSIX date(1) spec非常接近。

  4. 我这里没有Solaris 9机箱可供测试,所以我依赖于明智的推测:首先,Solaris 9附带Perl作为Solaris 10和11,第二,它是Perl 5,所以它将接受解决方案中的the -MPOSIX flag。 Perl 4不支持模块,因此它没有-M标志。我确信我可以编写一个可以与Perl 4一起使用的不同解决方案,但是因为你不需要它可以在那么远的地方工作,而且自从我写了任何Perl 4以来已经有二十年...

    < / LI>

答案 1 :(得分:-1)

怎么样:

public B() {
    super();
    System.out.println("B");
}

这相当于:

timestamp="$(date +'%m/%d/%Y') $(date +'%a')"