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目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
python判断字符串是否纯数字的方法
Nov 19 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python实现抽奖小程序
Apr 15 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
python将图片转base64,实现前端显示
Jan 09 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
Python 如何创建一个线程池
Jul 28 Python
如何快速理解python的垃圾回收机制
Sep 01 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
一个目录遍历函数
2006/10/09 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
php自动载入类用法实例分析
2016/06/24 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python中itertools的用法详解
2020/02/07 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
简短证婚人证婚词
2014/01/09 职场文书
高一家长会邀请函
2014/01/12 职场文书
2014年班务工作总结
2014/12/02 职场文书
旷工辞退通知书
2015/04/17 职场文书
小学远程教育工作总结
2015/08/13 职场文书
运动会广播稿100字
2015/08/19 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
java实现面板之间切换功能
2022/06/10 Java/Android