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使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
python内存管理分析
Apr 08 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
python学习基础之循环import及import过程
Apr 22 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Python无损压缩图片的示例代码
Aug 06 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP 5.3.0 安装分析心得
2009/08/07 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Python实时获取cmd的输出
2015/12/13 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
keras 权重保存和权重载入方式
2020/05/21 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
护士自荐信怎么写
2013/10/18 职场文书
材料采购员岗位职责
2013/12/17 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python