Date arithmetic in Unix shell scripts

前端 未结 14 1594
生来不讨喜
生来不讨喜 2020-11-27 22:29

I need to do date arithmetic in Unix shell scripts that I use to control the execution of third party programs.

I\'m using a function to increment a day and another

14条回答
  •  爱一瞬间的悲伤
    2020-11-27 22:56

    For BSD / OS X compatibility, you can also use the date utility with -j and -v to do date math. See the FreeBSD manpage for date. You could combine the previous Linux answers with this answer which might provide you with sufficient compatibility.

    On BSD, as Linux, running date will give you the current date:

    $ date
    Wed 12 Nov 2014 13:36:00 AEDT
    

    Now with BSD's date you can do math with -v, for example listing tomorrow's date (+1d is plus one day):

    $ date -v +1d
    Thu 13 Nov 2014 13:36:34 AEDT
    

    You can use an existing date as the base, and optionally specify the parse format using strftime, and make sure you use -j so you don't change your system date:

    $ date -j -f "%a %b %d %H:%M:%S %Y %z" "Sat Aug 09 13:37:14 2014 +1100"
    Sat  9 Aug 2014 12:37:14 AEST
    

    And you can use this as the base of date calculations:

    $ date -v +1d -f "%a %b %d %H:%M:%S %Y %z" "Sat Aug 09 13:37:14 2014 +1100"
    Sun 10 Aug 2014 12:37:14 AEST
    

    Note that -v implies -j.

    Multiple adjustments can be provided sequentially:

    $ date -v +1m -v -1w
    Fri  5 Dec 2014 13:40:07 AEDT
    

    See the manpage for more details.

提交回复
热议问题