思路
Linux 打印当前的 timestamp
Linux 如何查看当前机器的时区
Python 中访问时区、当地时间、UTC 时间
平时编程中对时间的处理
整理和时区相关的信息
打印 timestamp
$ date +%s
Unix时间戳(Unix timestamp)转换工具 - 站长工具
Linux 查看和设置当前时区
date 的时候可以知道现在是什么时区。
$ date +%Z
CST
$ date +%z
+0800
Ubuntu 中如下设置:
$ sudo dpkg-reconfigure tzdata
date - Timezone setting in Linux - Unix & Linux Stack Exchange
Python 与时区
Python 打印当前的时区
>>> import time
>>> time.strftime("%z")
'+0800'
>>> time.strftime("%Z")
'CST'
>>> time.tzname
('CST', 'CST')
datetime - Python: Figure out local timezone - Stack Overflow
datetime - Get time zone information of the system in Python? - Stack Overflow
datetime 和 timestamp 转换实验
timestamp 都是和 utc 时间做比较的。从 timestamp 到 datetime 比较容易。但需要注意默认转换出来的 datetime 是本地的(但是对象里面不携带这个时区信息,所以有时候得注意)。
在 CST+0800 时区的机器执行的结果如下:
>>> import datetime
>>> datetime.datetime.fromtimestamp(1464771600)
datetime.datetime(2016, 6, 1, 17, 0)
>>> datetime.datetime.utcfromtimestamp(1464771600)
datetime.datetime(2016, 6, 1, 9, 0)
在 MSK+0300 时区的机器执行的结果如下:
>>> datetime.datetime.fromtimestamp(1464771600)
datetime.datetime(2016, 6, 1, 12, 0)
>>> datetime.datetime.utcfromtimestamp(1464771600)
datetime.datetime(2016, 6, 1, 9, 0)
这个虽然是转换,但是其实会和机器 timezone 相关。
而 datetime 转 timestamp Python 3.3 以下没有提供直接的函数,其实道理不复杂,就是先转换成 UTC 环境下的时间,然后再去计算和 1970 的时间差就好了。
local datetime to utc datetime
这个转换也是很不方便,虽然说起来道理是很简单的,所以先不深究了,这次只要先了解个大概。
平时编程中对时间的处理
储存时间的时候应该储存 timestamp 会比较好,其他的再用 timestamp 转换格式都比较方便。
像现在代码中直接存储 datetime.datetime.now()
,存在数据库中的时候是类似这个 2016-06-01 12:43:52.625111
的字符串,但是如果读取的机器的时区和填写数据的机器的时区不一样的话就有问题了。好在主要是给国内的单个时区的用户使用,所以还可以接受。
反过来这样的时间当做字符串传给客户端的时候客户端就需要把它当做 +8 的时间转换成 UTC 然后再转换成设备当地的时间才行,否则就很奇怪了。
有关时间的其他
中国的统一时区还是蛮方便的。但是毕竟有时差,有的事情和统一时区就没太大关系了,比如会存在篮球比赛啊、世界杯啊、发布会直播的时候我们这里是晚上,还有我们这里下班了看新闻联播直播的时候新疆那里还没有下班。
有用信息收集
-
List of time zone abbreviations - Wikipedia, the free encyclopedia
发现 CST 真的代表了好几个意思
-
夏令时原来是为了夏天把时间调早一点让人早点起床,来节约资源
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。