Python 官方文档:入门教程 => 点击学习
最近在开发项目的时候, 遇到了时区, 本地时间和UTC糅杂的情况, 研究之后做一些分享. UTC Universal Time Coordinated 又叫协调世界时, UTC用数值记录了时间. 时间记录的是0时区从1972年开始共计
最近在开发项目的时候, 遇到了时区, 本地时间和UTC糅杂的情况, 研究之后做一些分享.
UTC Universal Time Coordinated 又叫协调世界时, UTC用数值记录了时间. 时间记录的是0时区从1972年开始共计走过了多少秒. 所以本地时间与UTC时间的转换需要考虑时差.
一般说来, UTC时间的计算不外乎三种情况.
1: UTC <-----> UTC
2: UTC -----> LocalTime
3: LocalTime ------> UTC
第一种情况,处理比较简单, 差值就表示两个时间相差的秒数.
比如 utc1 = 1406869066, utc2 = 1406869070 相差4, 也就是这两个时间相差4秒.
==========
第二种情况, 可以利用编程语言中自带的包函数, 比如python的gmtime.
time = '1407391625'
print gmtime(float(time))
输出:
time.struct_time(
tm_year=2014,
tm_mon=8,
tm_mday=7,
tm_hour=6,
tm_min=7,
tm_sec=5,
tm_wday=3,
tm_yday=219,
tm_isdst=0
)
这样就把日期转换成方便识别的时期, 但注意, 这个日期是0时区的时刻, localtime还需要加减时区, 比如北京在东八区,那么时差为8小时, 所以此处的小时应该是14点, 而不是6点.
===========
第三种情况
需要特别注意, 因为不同的函数,处理的结果也是不相同的。
<span style="font-size:18px;">import calendar
import time
import datetime
d = datetime.datetime(2010, 10, 10)
calendar.timegm(d.timetuple())
1286668800
time.mktime(d.timetuple())
1286640000.0
</span>
因为calendar.timegm默认这里的2010-10-10 00:00:00是0时区的时刻,而time.mktime则认为这个是你系统的时间,所以会自动处理时差!比如北京时间东八区,这里time.mktime会认为0时区时间是2010-10-09 16:00:00.
所以在使用函数时候,要明白自己用来计算的时间到底是哪个时区的。以下以time.mktime来讨论
localTime ± 时差 = UTC时间.
<span style="font-size:18px;"> time = '2014-08-07-01-00-00'
fORMat_time = strptime(time, "%Y-%m-%d-%H-%M-%S") # 将字符串时间转为标准格式时间
utc_time = mktime(format_time)
print utc_time</span>
输出:
1407391407.0
****
需要注意的是, mktime会自动获取本机时区, 而帮我计算时差. 所以本地时间转换为utc很方便, 但如果出现了这种情况: 你在东八区, 需要处理来自西五区的一个日志文件(楼主所遇到的情况) 那么就需要手动为这个时差做处理, 否则机器会自动以本地时差处理. 那么就产生了13小时的误差. 所以以上代码改为:
<span style="font-size:18px;"> time = '2014-08-07-01-03-27'
format_time = strptime(time, "%Y-%m-%d-%H-%M-%S")
utc_time = mktime(format_time) + 3600*13 # 处理时差
print utc_time</span>
参考资料: 戳这里
完--结束END--
本文标题: Python utc转化时间
本文链接: https://lsjlt.com/news/189578.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0