bash shell脚本中的date命令

时间:2012-01-09 23:03:46

标签: bash date

在工作中,所有日期配置文件都是新生成的并附加了一个 会话编号。 公司在Feb 16上公开86400秒 在一天会话编号是通过减去公司开始生成的 来自seconds_since_last_day的日子,并添加几个零

这是与days配置文件交互的关键。我明白了 - 但是我没有 了解

date -ud "$distance days ago 00:00:00"

这是自1970年以来的秒数吗?

if $session; then
        # return the session of the last day
        seconds_since_day_one=`date -ud "Feb 16 2002" +"%s"`
        seconds_since_last_day=`date -ud "$distance days ago 00:00:00" +"%s"`
        days_between=`printf "%010d" $(( (seconds_since_last_day -  seconds_since_day_one) / 86400 ))`
        # Truncate on the left to 9 bytes to leave room
        # to append the engine suffix for your environment
        echo $days_between | awk '{l=length($1); print substr( $1, (l-8), l )}'

3 个答案:

答案 0 :(得分:2)

date -ud "$distance days ago 00:00:00"本身只是以一种非常易读的格式在一定天数之前打印日期,但是当您添加FORMAT字符串来控制输出+"%s"时确实意味着所谓的数字Unix时间(自1970-01-01 00:00:00 UTC以来的秒数)。

如果变量$distance设置为数字,则显示前几天的日期,如果设置为0则表示今天,1表示昨天,2表示前天,依此类推。为了更好地理解这些格式和相关关键字,在GNU coreutils包中(以及其他地方)有相当好的文档。

检查以下网址:
http://www.gnu.org/software/coreutils/manual/html_node/Relative-items-in-date-strings.html#Relative-items-in-date-strings
http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html
http://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html#date-invocation

维基百科对Unix时间的解释:
http://en.wikipedia.org/wiki/Unix_time

答案 1 :(得分:0)

date选项-d提供了一个通用字符串来获取日期。

因此,例如,date -d yesterday将打印昨天的日期,date -d 'yesterday 12:00 AM'将打印昨天的日期,时间设置为上午12:00。

因此,date -d 6 days ago 00:00:00将打印6天前的日期,时间设置为00:00:00。我希望它能回答你的问题。

格式+“%s”告诉date打印1970年的秒数,而不是日期。

答案 2 :(得分:0)

awk中的mktime和strftime可用于获取时间日期。 http://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html

例如,strftime(“%A”,mktime(“YYYY MM DD 00 00 00”)) 应该给你一天。