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中for语句简单遍历数据的方法
May 07 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
windows下python安装pip图文教程
May 25 Python
3个用于数据科学的顶级Python库
Sep 29 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
MooTools 1.2介绍
2009/09/14 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
js给selected添加options的方法
2015/05/06 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
从零学习node.js之express入门(六)
2017/02/25 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
python基础教程之常用运算符
2014/08/29 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
煤矿安全承诺书
2014/05/22 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js