Python中的日期时间处理详解


Posted in Python onNovember 17, 2016

Python中关于时间、日期的处理库有三个:time、datetime和Calendar,其中datetime又有datetime.date、datetime.time、datetime.datetime三个类。而时间又可以分为时间戳、本地时间和UTC时间(世界标准时间)。是不是听起来有点乱?那么他们相互之间有什么区别?有什么联系?又如何转换呢?

time模块

在time模块中,时间有三种表现形式:

时间戳,一般指Unix时间戳,是从1970年开始到现在的秒数。
本地时间的struct_time形式:一个长度为11的命名元组,第一位为年,第二位为月....
UTC时间的struct_time形式:一个长度为11的命名元组,类似于上个,只不过为UTC时间
其中后两者的类型一致,区别在于一个是本地时间(localtime),一个是utc时间。

各种时间形式的获取方式:

print("time stamp:", time.time())     # 时间戳:1479193181.829338

print("local time:", time.localtime())  # struct_time类型的本地时间
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=14, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0)

print("utc time:", time.gmtime())     # struct_time类型的utc时间
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=15, tm_hour=6, tm_min=59, tm_sec=41, tm_wday=1, tm_yday=320, tm_isdst=0)

这里可以看出,本地时间(北京时间)和UTC时间相差8个小时。

各种时间形式的转换:

time_stamp = time.time()        # 时间戳
local_time = time.localtime(time_stamp)# 时间戳转struct_time类型的本地时间
utc_time = time.gmtime(time_stamp)   # 时间戳转struct_time类型的utc时间

time_stamp_1 = time.mktime(local_time) # struct_time类型的本地时间转时间戳
time_stamp_2 = calendar.timegm(utc_time)# struct_time类型的utc时间转时间戳
print(time_stamp, time_stamp_1, time_stamp_2)

各种时间形式和字符串之间的转换:

print(time.ctime(time_stamp))    # 时间戳转字符串(本地时间字符串)

print(time.asctime(local_time))   # struct_time类型的本地时间转字符串
print(time.asctime(utc_time))    # struct_time类型的utc时间转字符串

# struct_time类型的本地时间转字符串:自定义格式
print(time.strftime("%Y-%m-%d, %H:%M:%S, %w", local_time))
# struct_time类型的utc时间转字符串:自定义格式
print(time.strftime("%Y-%m-%d, %H:%M:%S, %w", utc_time))

struct_time = time.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w")    # 字符串转struct_time类型

Python中的日期时间处理详解

datetime模块

接下来再看datetime模块。该模块中包含4个主要的类:

datetime.time:时间类,只包含时、分、秒、微秒等时间信息。
datetime.date:日期类,只包含年、月、日、星期等日期信息。
datetime.datetime:日期时间类,包含以上两者的全部信息。
datetime.timedelta:时间日期差值类,用来表示两个datetime之间的差值。
关于各个类的基本用法比较简单,建议看官方文档:datetime module

这里主要说一下datetime.datetime类的用法,其他两个的用法类似,只有轻微差别:

a_datetime_local = datetime.datetime.now() # 获取datetime.datetime类型的本地时间
a_datetime_utc = datetime.datetime.utcnow() # 获取datetime.datetime类型的utc时间

# datetime.datetime类型转字符串
print(a_datetime_local.strftime("%Y-%m-%d, %H:%M:%S, %w")) 
# datetime.datetime类型转字符串
print(a_datetime_utc.strftime("%Y-%m-%d, %H:%M:%S, %w"))  

a_datetime = datetime.datetime.strptime("2016-11-15, 15:32:12, 2", "%Y-%m-%d, %H:%M:%S, %w")  # 字符串转

datetime.datetime格式

datetime类型和时间戳、struct_time类型的相互转换

datetime.datetime和时间戳、struct_time之间,也能够相互转换:

time_stamp = a_datetime_local.timestamp()  # datetime类型转时间戳
print(time_stamp)

a_datetime_local = datetime.datetime.fromtimestamp(time.time())   # 时间戳转datetime.datetime类型的本地时间
a_datetime_utc = datetime.datetime.utcfromtimestamp(time.time())  # 时间戳转datetime.datetime类型的utc时间
print(a_datetime_local, a_datetime_utc)

print(a_datetime_local.timetuple())   # datetime类型转struct_time类型
print(a_datetime_utc.utctimetuple())  # datetime类型转struct_time类型

Python中的日期时间处理详解

本文主要讲了各种时间、日期类型的基本用法,以及他们之间相互转换的方法,以及他们和字符串之间相互转换的方法。

老规矩,文中代码已上传至github:https://github.com/xianhu/LearnPython

本站备份下载地址:http://xz.3water.com:81/201611/yuanma/LearnPython(3water.com).zip

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
Python实现的RSS阅读器实例
Jul 25 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
python批量替换多文件字符串问题详解
Apr 22 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
python之列表推导式的用法
Nov 29 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
python字典进行运算原理及实例分享
Aug 02 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 #Python
Python进阶篇之字典操作总结
Nov 16 #Python
Python极简代码实现杨辉三角示例代码
Nov 15 #Python
Python实现将不规范的英文名字首字母大写
Nov 15 #Python
利用Python开发实现简单的记事本
Nov 15 #Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 #Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 #Python
You might like
php中批量替换文件名的实现代码
2011/07/20 PHP
调整PHP的性能
2013/10/30 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
java script编程起步(第三课)
2007/01/10 Javascript
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
Dojo 学习要点
2010/09/03 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Python中itertools模块用法详解
2014/09/25 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python:socket传输大文件示例
2017/01/18 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
创建卫生先进单位实施方案
2014/03/10 职场文书
工作推荐信范文
2014/05/10 职场文书
百日安全生产活动总结
2014/07/05 职场文书
见习报告格式要求
2014/11/04 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL