【发布时间】:2013-04-22 08:52:35
【问题描述】:
在linux中,date可以帮我打印当前时间。如果要打印当前时间+1小时,我应该给什么选项?
【问题讨论】:
-
如果您尝试进行时区校正,请查看
TZ环境变量并将日期存储为UTC! -
我只想获取当前时间和 1 小时后作为我另一个代码的输入,谢谢。
在linux中,date可以帮我打印当前时间。如果要打印当前时间+1小时,我应该给什么选项?
【问题讨论】:
TZ 环境变量并将日期存储为UTC!
只需使用-d(或--date)对日期进行一些数学运算:
date -d '+1 hour' '+%F %T'
# ^^^^^^^^^^^^
例如:
$ date '+%F %T'
2013-04-22 10:57:24
$ date -d '+1 hour' '+%F %T'
2013-04-22 11:57:24
# ^
警告,以上内容仅适用于 Linux,不适用于 Mac OS。
在 Mac OS 上,等效的命令是
date -v+1H
【讨论】:
在shell脚本中,如果我们需要添加时间然后使用下面的命令和日期格式(把时间放在日期字符串之前)
date -d"11:15:10 2017-02-05 +2 hours" +"%Y-%m-%d %H:%M:%S"
这将输出
2017-02-05 13:15:10
这不会导致没有 UTC 的正确日期它不起作用
【讨论】:
如果您需要编写可在 Linux 服务器和 macOS 工作站上运行的脚本,您可以将第一个 date 调用的错误静音,然后将其与另一个调用“或”(||)。哪个先来并不重要。
date -u -d "+${max_age}Seconds" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || \
date -u -v "+${max_age}S" +"%Y-%m-%dT%H:%M:%SZ"
例如,此 bash 函数将文件上传到 AWS S3 并设置 Expires: 和 Cache-Control: 标头。
s3_upload_cache_control(){
local max_age_seconds="${1}" ;shift # required
local bucket_path="${1}" ;shift # required
local filename="${1}" ;shift # required
local remote_filename="/${1:-${filename}}" # optional
local fmt="+%Y-%m-%dT%H:%M:%SZ"
aws s3 cp \
"${filename}" \
"s3://${bucket_path}${remote_filename}" \
--expires "$( \
date -u -d "+${max_age_seconds}Seconds" $fmt 2>/dev/null || \
date -u -v "+${max_age_seconds}S" $fmt )" \
--cache-control max-age=$max_age,public \
--acl public-read
}
【讨论】:
对我来说,添加加号 + 只是让它认为我想使用时区。
所以
date -d "2021-03-16 00:00:00 +3 minutes" +'%H:%M'
返回23:01,这很奇怪..
但我省略了加号,然后这样做:
date -d "2021-03-16 00:00:00 1 hour" +'%H:%M'
然后返回01:00。
【讨论】:
根据source,您可以这样做:
date --date='1 小时'
【讨论】:
TZ=Asia/Calcutta date 应该可以工作(显然这会让你有时间在加尔各答)。
这只会更改此操作的 TimeZone (TZ) 环境变量,它不会将您永久设置为您指定的新时区。
【讨论】:
Europe/London 或America/Chicago,他可以直接替换它们。
我们可以使用下面的代码来获取它,我正在处理一个我需要遍历过去 3 个月的日期的情况,我使用下面的代码来遍历相同的情况
for i in {90..1}
do
st_dt=$(date +%F' 00:00:00' -d "-$i days")
echo $st_dt
j=$((i-1))
end_dt=$(date +%F' 00:00:00' -d "-$j days")
echo $end_dt
done
【讨论】:
在 Linux shell 脚本中添加 1 小时或 60 分钟。
dt=$(date -d '+ 60 minutes' '+%FT%T.000Z')
【讨论】: