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 psutil模块简单使用实例
Apr 28 Python
Python中字典映射类型的学习教程
Aug 20 Python
Python的组合模式与责任链模式编程示例
Feb 02 Python
python实现折半查找和归并排序算法
Apr 14 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 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
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
flash 得到自身url参数的代码
2009/11/15 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python网络编程之文件下载实例分析
2015/05/20 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
幼儿园中秋节活动方案2013
2014/01/29 职场文书
献爱心倡议书
2014/04/14 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
大学生简历求职信
2014/06/24 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
检讨书怎么写
2015/05/07 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
Redis实现分布式锁的五种方法详解
2022/06/14 Redis