Python中生成Epoch的方法


Posted in Python onApril 26, 2017

在Python2中datetime对象没有timestamp方法,不能很方便的生成epoch,现有方法没有处理很容易导致错误。关于Epoch可以参见时区与Epoch

0 Python中生成Epoch

from datetime import datetime
# python3
datetime.now().timestamp()
# python2
import time
time.mktime(datetime.now().timetuple()) # 为了兼容python2和3,该用法使用更广泛

1 错误代码

from datetime import datetime
import pytz
aware_date = datetime.utcnow().replace(tzinfo=pytz.utc)
time.mktime(aware_date.timetuple()) # bug here

2 原因

Python中的datetime对象分为带时区信息和不带时区信息的两种对象即naive和aware对象。在处理naive时,一切皆默认为系统时区,没有任何问题。

在Python3中执行timestamp时对于naive对象,按照默认时区处理(调用time.mktime),而aware对象,则带上时区计算与UTC基准时间的间隔秒数得到,也就是将时区信息考虑在内。

而Python2和3中的timetuple方法,返回的结果没有包含时区信息,也没有进行时区转换。即调用timetuple对于aware日期对象而言,时区信息被丢弃,因此再调用time.mktime将得到一个错误的结果

3 解决办法

1、方法一:将其他时区的aware日期,转换为当前系统默认的时区的aware对象, 由于与系统时区一致,因此该aware对象与无时区的naive对象执行timetuple的效果一样。

转换时区参见timezone,即调用astimezone方法,参数为转换后的时区(tzinfo实例)

由于Python2中缺失tzinfo(抽象基类)的各个时区实例,需要自己构造时区对象。
时区实例可以参考官方文档的实现datetime或使用推荐的第三方库pytz

2、方法二:计算时间差

_EPOCH = datetime(1970, 1, 1, tzinfo=pytz.utc) # 第三方库 pytz
  (aware_date - _EPOCH).total_seconds()

以上这篇Python中生成Epoch的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之自定义函数介绍
Aug 29 Python
详解Python中for循环的使用
Apr 14 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python实现堆和索引堆的代码示例
Mar 19 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python socket 套接字实现通信详解
Aug 27 Python
python连接mongodb集群方法详解
Feb 13 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Python基于time模块表示时间常用方法
Jun 18 Python
python selenium 获取接口数据的实现
Dec 07 Python
python 网络编程详解及简单实例
Apr 25 #Python
python 全文检索引擎详解
Apr 25 #Python
window下eclipse安装python插件教程
Apr 24 #Python
Python处理PDF及生成多层PDF实例代码
Apr 24 #Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 #Python
python爬虫实战之爬取京东商城实例教程
Apr 24 #Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 #Python
You might like
B2K与车机的中波PK
2021/03/02 无线电
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
实例讲解php实现多线程
2019/01/27 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
JavaScript实现滚动加载更多
2020/12/27 Javascript
Python urlopen 使用小示例
2008/09/06 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python截取两个单词之间的内容方法
2018/12/25 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
就业自我评价
2014/02/04 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Python基础之元组与文件知识总结
2021/05/19 Python
Python字符串的转义字符
2022/04/07 Python