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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
通过代码实例展示Python中列表生成式的用法
Mar 31 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
详解Python中for循环是如何工作的
Jun 30 Python
Python生成短uuid的方法实例详解
May 29 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
python实现控制台输出彩色字体
Apr 05 Python
keras slice layer 层实现方式
Jun 11 Python
Python lambda表达式原理及用法解析
Aug 18 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
利用python爬取有道词典的方法
Dec 08 Python
python库sklearn常用操作
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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
自考自我鉴定范文
2013/10/30 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
管理标语大全
2014/06/24 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
单位租房协议书范本
2014/12/04 职场文书
高考1977观后感
2015/06/04 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
Python中异常处理用法
2021/11/27 Python
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers