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函数式编程指南(三):迭代器详解
Jun 24 Python
Python全局变量用法实例分析
Jul 19 Python
Python之读取TXT文件的方法小结
Apr 27 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python实现ip代理池功能示例
Jul 05 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
Python流程控制语句的深入讲解
Jun 15 Python
详解python字符串驻留技术
May 21 Python
Pygame Time时间控制的具体使用详解
Nov 17 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 什么是PEAR?(第三篇)
2009/03/19 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
Python中关键字is与==的区别简述
2014/07/31 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
文化宣传方案
2014/03/13 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
工厂见习报告范文
2014/10/31 职场文书
颐和园的导游词
2015/01/30 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
离婚协议书格式范本
2016/03/18 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers