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代理抓取并验证使用多线程实现
May 03 Python
Python列表append和+的区别浅析
Feb 02 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
浅谈python数据类型及类型转换
Dec 18 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
pycharm激活方法到2099年(激活流程)
Sep 22 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
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
python实现socket端口重定向示例
2014/02/10 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
深入浅析Python中的迭代器
2019/06/04 Python
django框架使用方法详解
2019/07/18 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python接口测试get请求过程详解
2020/02/28 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
服务员岗位责任制
2014/02/11 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
基于Python实现西西成语接龙小助手
2022/08/05 Golang
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android