BASH使用夏令时计算两个时区之间的秒数

BASH使用夏令时计算两个时区之间的秒数,bash,date,timezone,epoch,Bash,Date,Timezone,Epoch,由于中央时区CDT在中央标准时间(GMT-6)和中央夏时制(GMT-5)之间振荡,是否有方法使用BASH/date计算特定日期GMT和中央时间之间的秒数 例如,计算3月1日的中心时间(使用DST)和格林尼治标准时间之间的秒数应该得到6小时*3600秒/小时=21600秒。在3月31日计算它应该得到5小时*3600秒/小时=18000秒。我找到了一个解决方案 $ date1="2018-03-11 01:59:00" $ echo "$(TZ="US/Central"; date -d "$da

由于中央时区CDT在中央标准时间(GMT-6)和中央夏时制(GMT-5)之间振荡,是否有方法使用BASH/date计算特定日期GMT和中央时间之间的秒数


例如,计算3月1日的中心时间(使用DST)和格林尼治标准时间之间的秒数应该得到6小时*3600秒/小时=21600秒。在3月31日计算它应该得到5小时*3600秒/小时=18000秒。

我找到了一个解决方案

$ 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
它不太理想,因为它不能非常优雅地处理无效日期:

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

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