首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash Date WakeUp

Bash Date WakeUp
EN

Stack Overflow用户
提问于 2020-03-30 02:26:20
回答 2查看 57关注 0票数 2

几个月以来,我在我的NAS上的脚本中使用了这个命令:

代码语言:javascript
复制
sudo rtcwake -m disk -t  "$(date -d 'tomorrow  02:00:00' '+%s')"

今天我得到了一个错误。

我的测试结果:

代码语言:javascript
复制
root@omvnas:~# date -d 'tomorrow  02:00:00' '+%s'
date: ungültiges Datum „tomorrow  02:00:00“
root@omvnas:~# date -d '+1 day 3:00'
Mo 30. Mär 03:00:00 CEST 2020
root@omvnas:~# date -d '+1 day 2:00'
date: ungültiges Datum „+1 day 2:00“
root@omvnas:~# date -d '+1 day 1:00'
Mo 30. Mär 01:00:00 CEST 2020

"ungültiges Datum“是德语中”无效日期“的意思。

为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

发布于 2020-03-30 03:36:13

这个问题确实与daylight saving time有关,但这似乎不是date程序的错误,而是一个“特性”:下面的所有命令都会引发错误,因为本地时区中不存在指定的时间(直接从01:59:5903:00:00)。

代码语言:javascript
复制
$ date -d '02:00:00'
date: invalid date ‘02:00:00’
$ date -d '02:30:00'
date: invalid date ‘02:30:00’
$ date -d '+1 day 02:30:00'
date: invalid date ‘+1 day 02:30:00’
$ date -d '+2 day 02:30:00'
date: invalid date ‘+2 day 02:30:00’

上面的最后两个命令肯定会引发错误,因为date程序试图在解析指定时间后递增天数,这确实是无效的。

正如我在评论中提到的,解决此问题的可靠方法是依赖UTC时区(选项--utc):

代码语言:javascript
复制
$ date -d 'today 01:59:59' -R
Sun, 29 Mar 2020 01:59:59 +0100
$ date -d 'today 01:59:59' '+%s'
1585443599
$ date -d 'today 02:00:00' '+%s'
date: invalid date ‘today 02:00:00’
$ date -d 'today 03:00:00' '+%s'
1585443600
$ date -u -d 'today 01:00:00' '+%s'  # OK thanks to option -u
1585443600
票数 2
EN

Stack Overflow用户

发布于 2020-03-30 03:47:04

这似乎是与daylight saving time (DST)相关的date / tzdata中的错误。

这是一个相关的错误报告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=819342

它仍然可以用当前的Debian Sid重现。

你现在最好的办法是使用一个不受DST影响的时间(例如03:00:00)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60918890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档