我想在 bash 中结束一天的纪元。 例如: date +%s 上面的命令给出了当前纪元。 我想要当前日期的一天结束时间。

您可以简单地用参数指定它-d。 即date -d "today 23:59:59" +%s 今天 23:29:59 用于获取当天的结束 编辑:@Toby提出以下方法来正确处理闰秒-d 'tomorrow 0 -1second 如果你想在一天的开始使用 date -d "today 0" +%s

使用 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)) 但这不会在可能相关的两天内考虑夏令时。

那是当前本地日期还是当前UTC日期?

这假设 GNUdate不是-d标准的。

这在正确处理闰秒的系统上是不正确的(一天的最后一分钟可以有 61 秒)。你真的想要-d 'tomorrow 0 -1second'。