在计算UNIX时间时将日期数学取整为最接近的月份

时间:2019-02-22 22:48:25

标签: linux bash unix-timestamp

我想获取UNIX时间戳值(自1970年1月1日以来的秒数),以与当前时间偏移,同时将结果四舍五入到月初。

基本上,我需要此输出-从当前日期起两个月,但该月的第一天。

date -d "2019-04-01" "+%s"
1554102000

但是,我不想手动添加日期。我想做类似的事情:

date -d +"%Y%m" --date="+2 month" +"%s"
1555973219

但不幸的是,这给了我错误的时间戳(结果没有四舍五入到月初)。

2 个答案:

答案 0 :(得分:2)

如果我了解您想要做什么。这样就可以完成,并始终为您提供从现在开始2个月的月份的秒数。

'none', 'inherit', 'circle', 'disc', 'decimal' ...

尽管似乎我们处于不同的时区。您可以添加时区,也可以将UTC标志添加到语句的xargs部分。

答案 1 :(得分:1)

在使用GNU date时,这一切都可以正常工作:

set -x
date
start_of_2mo_hence=$(date -d 'now + 2 months' +%Y-%m-01)
start_of_2mo_hence_sec=$(date -d "$start_of_2mo_hence" +%s)
date -d "@$start_of_2mo_hence_sec"

...发出:

+ date
Fri Feb 22 17:04:49 CST 2019
++ date -d 'now + 2 months' +%Y-%m-01
+ start_of_2mo_hence=2019-04-01
++ date -d 2019-04-01 +%s
+ start_of_2mo_hence_sec=1554094800
+ date -d @1554094800
Mon Apr  1 00:00:00 CDT 2019

当然,这可以简化为:

start_of_2mo_hence_sec=$(date -d "$(date -d 'now + 2 months' +%Y-%m-01)" +%s)
相关问题