在shell脚本bash中获取结束日期

时间:2018-05-22 11:49:08

标签: bash shell datetime

我希望在bash中获得结束时代。

例如:

date +%s

上面的命令给出了当前的纪元。

我想要当前日期的结束日期。

2 个答案:

答案 0 :(得分:4)

您只需使用-d参数指定。

即。 date -d "today 23:59:59" +%s 今天23:29:59用于结束当天

修改:@ weboptions建议采用以下方法正确处理闰秒-d 'tomorrow 0 -1second

如果您想要一天的开始,请使用

date -d "today 0" +%s

答案 1 :(得分:1)

使用BSD date,您可以使用-v正确调整时间。

% date
Tue May 22 09:21:50 EDT 2018
% date  -v 23H -v 59M -v 59S
Tue May 22 23:59:59 EDT 2018

稍长一点,但是你不必记住一天中的小时数,一小时内的分钟数等,明天再到午夜,然后减去一秒钟。

% date -v +1d -v 0H -v 0M -v -0S -v -1S
          ^      ^     ^      ^     ^
          |      |     |      |     |
          |      +-----+------+     subtract one second
          |            |
          |        reset to midnight
          |
          go to tomorrow

(遗憾的是-v无法合并。date -v+1d0H0MS-1S可以很好地输入。它不是非常易读或明显,但如果你知道如何-v就很容易解析工作。空白会使它变得更好:date -v "+1d 0H 0M 0S -1S"。#wishfulthinking)

一种简单但脆弱的方法是将最接近的86400倍数:

$ now=$(date +%s)
$ end_of_day=$(( now - now%86400 + 86399))

但是,在可能相关的两天内,这不会将夏令时考虑在内。