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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
在centos7中分布式部署pyspider
May 03 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
使用Python操作FTP实现上传和下载的方法
Apr 01 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
对django layer弹窗组件的使用详解
Aug 31 Python
python机器学习库xgboost的使用
Jan 20 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
python获取命令行参数实例方法讲解
Nov 02 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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 SQL防注入代码集合
2008/04/25 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
Python struct模块解析
2014/06/12 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python PIL库图片灰化处理
2020/04/07 Python
Django如何使用redis作为缓存
2020/05/21 Python
python如何爬取动态网站
2020/09/09 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
石油工程专业毕业生求职信
2014/04/13 职场文书
农业开发项目建议书
2014/05/16 职场文书
人力资源求职信
2014/05/25 职场文书
应届大学生自荐书
2014/06/17 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
户外活动总结
2015/02/04 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
python爬虫selenium模块详解
2021/03/30 Python
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python