关于日期:BASH计算具有夏令时的两个时区之间的秒数

BASH compute number of seconds between two timezones with daylight savings

由于中央时区CDT在中央标准时间(GMT-6)和中部夏令时(GMT-5)之间振荡,有没有办法使用BASH / date来计算特定日期的GMT和中部时间之间的秒数?

例如,计算中央时间(使用DST)和3月1日GMT之间的秒数应该产生6小时* 3600秒/小时= 21600秒。 在3月31日计算它应该产生5小时* 3600秒/小时= 18000秒。


这是我找到的解决方案。

1
2
3
4
5
6
7
8
9
$ date1="2018-03-11 01:59:00"

$ echo"$(TZ="US/Central"; date -d"$date1" +"%s") - $(date -u -d"$date1" +"%s")" | bc
21600

$ date1="2018-03-11 03:01:00"

$ echo"$(TZ="US/Central"; date -d"$date1" +"%s") - $(date -u -d"$date1" +"%s")" | bc
18000

它不是很理想,因为它没有非常优雅地处理无效日期:

1
2
3
4
5
$ date1="2018-03-11 02:00:00"

$ echo"$(TZ="US/Central"; date -d"$date1" +"%s") - $(date -u -d"$date1" +"%s")" | bc
date: invalid date2018-03-11 02:00:00’
-1520733600