date命令在bash shell脚本中

问题描述:

在工作中,所有的日子配置文件都会生成新的并附加 会话编号。 公司上市Feb 16,而86400秒 在一天内。该会话数量减去公司从seconds_since_last_day开始 天和加入产生零点几的date命令在bash shell脚本中

这才是关键与天CONFIG文件交互。我得到这个 - 但我不知道 了解

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)}' 

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

因此,例如,date -d yesterday将打印昨天的日期,并且date -d 'yesterday 12:00 AM'将打印昨天的日期,时间设置为12:00 AM。因此,date -d 6 days ago 00:00:00将打印6天前的日期,时间设置为00:00:00。我希望它能回答你的问题。

格式+“%s”告诉date打印1970年代替日期的秒数。

+0

if'date -d 6 days ago' will print the date from six days ago,and'date -ud“$ distance days ago 00:00:00”'= Sun Jan 8 00:00:00 UTC 2012(昨天的日期)和'日期-ud“$ distance days 00:00:00”+“%s”会给我 - 1325980800 $ distance的值是多少?因为我没有看到$距离有任何价值。这个shell脚本给了我正确的会话。 – capser 2012-01-09 23:24:21

+0

是$ distance null? – capser 2012-01-09 23:25:20

+0

因为如果距离为空,我认为它会打破日期命令,但它似乎没有破坏任何东西。 – capser 2012-01-09 23:26:30

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

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

例如,的strftime( “%A”,mktime( “年月日00 00 00”)) 应该给你的那一天。