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代理的方法
Jan 14 Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
在Python的Django框架中编写编译函数
Jul 20 Python
老生常谈Python序列化和反序列化
Jun 28 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
python zip,lambda,map函数代码实例
Apr 04 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
python实现定时发送邮件
Dec 23 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
document.getElementById介绍
2011/09/13 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
jquery 设置style:display的方法
2015/01/29 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
手机端转换rem适应
2017/04/01 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
JavaScript 中的六种循环方法
2021/01/06 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
Python中几种操作字符串的方法的介绍
2015/04/09 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python二元表达式用法
2019/12/04 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
工程开工庆典邀请函
2014/02/01 职场文书
运动会通讯稿500字
2014/02/20 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
服务质量承诺书
2014/03/27 职场文书
教师节活动主持词
2014/04/02 职场文书
小学优秀班主任材料
2014/12/17 职场文书