gpt4 book ai didi

bash - 在 bash 中检测夏令时

转载 作者:行者123 更新时间:2023-11-29 08:48:17 25 4
gpt4 key购买 nike

我想检测我是在冬季还是夏季。我目前的做法是:

if date +%Z | grep -e CET -e EST; then
# I'm in winter time
else
# I'm in summer time
fi

这有明显的缺点,因为您必须知道所有时区名称。

最佳答案

我现在不知道这是否能准确回答您的问题,但它为您提供了一些工具来帮助您更好地理解和测试正在发生的事情。

您可以使用 date 和 environment-var TZ 来帮助您。

例如,我住在瑞典,所以我的时区位置是Europe/Stockholm。所以在冬天 date +%Z 报告 CET,在夏天报告 CEST。好处是您可以为特定命令的环境指定时区,然后您可以指定 date 命令应该显示的日期。因此,通过总结这一点,您可以执行以下任一操作:

TZ=Europe/Stockholm date +%Z # CET or CEST depending of when its run
TZ=Europe/Stockholm date --date=20170101 +%Z # CET
TZ=Europe/Stockholm date --date=20170601 +%Z # CEST
TZ=CET date --date=20170101 +%Z # CET
TZ=CET date --date=20170601 +%Z # CEST, note that its auto adjusted to CEST

如果您想要与 UTC 的时差,您可以使用小写字母-z:

TZ=Europe/Stockholm date +%z # +0100 or +0200 depending of when its run
TZ=Europe/Stockholm date --date=20170101 +%z # +0100
TZ=Europe/Stockholm date --date=20170601 +%z # +0200
TZ=CET date --date=20170101 +%z # +0100
TZ=CET date --date=20170601 +%z # +0200

注意:您不能使用 TZ=CESTTZ=ULFR,因为那不是有效的 TZ:

TZ=CEST date --date=20170101 +%z # +0000
TZ=ULFR date --date=20170101 +%z # +0000

crontab 示例:

我们在 UTC 上运行我们的服务器,但 crontab 运行的一些作业需要在指定的挂钟 (CET/CEST) 时间运行。因此,由于我们希望作业在冬天晚一小时运行(时钟在夏天提前一小时女巫使它在夏天比冬天早一小时到达指定的 UTC 时间)我们做 在冬天执行实际作业之前 sleep

我们希望作业 /whatever/bin/foobar 每天在 04:15 挂钟时间运行。但由于 cron 在 UTC 上运行,因此需要为 CET 提前一小时设置作业,为 CEST 提前两小时设置作业。这与总是提前两个小时运行命令但在冬天睡一个小时是一样的。 Ex crontab 行:

15 2 * * * [ `TZ=CET date +\%Z` = CET ] && sleep 3600; /whatever/bin/foobar

如果你对这个问题有更好的解决办法,欢迎不吝赐教!

关于bash - 在 bash 中检测夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19901906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com