linux - 为什么Linux系统时间每6个月加减一小时?
问题描述
在计算连续 2 天之间的秒数时,应该有 86400 秒(24*60*60)。
但一年两次,情况并非如此……
一次一天有 23 小时,6 个月后一天有 25 小时。
为什么会这样?
我运行了一个代码来检查从 2005 年到 2019 年的 2 天之间的秒数,并且全年只有 24 小时,除了 2 天是 23 和 25。为什么会发生这种情况?这是我的结果摘要 - 差异列是这一天与前一天之间的秒数为 86400 秒
+------------+------------+-------------------+
| dates | difference | number_of_seconds |
+------------+------------+-------------------+
| 2005-04-02 | 3600 | 82800 |
| 2005-10-10 | -3600 | 90000 |
| 2006-04-01 | 3600 | 82800 |
| 2006-10-02 | -3600 | 90000 |
| 2007-03-31 | 3600 | 82800 |
| 2007-09-17 | -3600 | 90000 |
| 2008-03-29 | 3600 | 82800 |
| 2008-10-06 | -3600 | 90000 |
| 2009-03-28 | 3600 | 82800 |
| 2009-09-28 | -3600 | 90000 |
| 2010-03-27 | 3600 | 82800 |
| 2010-09-13 | -3600 | 90000 |
| 2011-04-02 | 3600 | 82800 |
| 2011-10-03 | -3600 | 90000 |
| 2012-03-31 | 3600 | 82800 |
| 2012-09-24 | -3600 | 90000 |
| 2013-03-30 | 3600 | 82800 |
| 2013-10-28 | -3600 | 90000 |
| 2014-03-29 | 3600 | 82800 |
| 2014-10-27 | -3600 | 90000 |
| 2015-03-28 | 3600 | 82800 |
| 2015-10-26 | -3600 | 90000 |
| 2016-03-26 | 3600 | 82800 |
| 2016-10-31 | -3600 | 90000 |
| 2017-03-25 | 3600 | 82800 |
| 2017-10-30 | -3600 | 90000 |
| 2018-03-24 | 3600 | 82800 |
| 2018-10-29 | -3600 | 90000 |
+------------+------------+-------------------+
这是我在完整代码中运行的代码示例 -
echo $((($(date +%s --date 2006-03-31)-$(date +%s --date 2006-03-30))))
echo $((($(date +%s --date 2006-04-01)-$(date +%s --date 2006-03-31))))
echo $((($(date +%s --date 2006-04-02)-$(date +%s --date 2006-04-01))))
解决方案
具有 %s 格式的date
命令为您提供从纪元开始的挂钟时间(以秒为单位),并且您的位置有夏令时。因此,当您往返于夏季时间时,您要么增加一个小时,要么减少一个小时。
推荐阅读
- c# - Observable Collection 不更新用户控件内的视图
- ios - 如何使用 Swift 通过代码库增加和减少 UIView 高度
- regex - 将多个正则表达式合并为一个
- c++ - 如何在 C++ 中打印后退箭头星星图案?
- javascript - 表单提交和更新父页面后关闭javascript弹出窗口?
- regex - 从日期范围/列表中过滤非工作日
- django - 如何在 django 的 urls.py 单个项目中添加两个应用程序的 url?
- ios - 我需要帮助计算频率和百分比,我需要它以最频繁的顺序排列,没有引号和大括号等
- javascript - 如何在 Firebase Firestore 中找到文档的父集合?
- android - 如何再次调用 LiveData Coroutine Block