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 备份程序代码实现
Mar 06 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
Python中enumerate函数代码解析
Oct 31 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Python 处理文件的几种方式
Aug 23 Python
关于numpy数组轴的使用详解
Dec 05 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
python调试工具Birdseye的使用教程
May 25 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 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 无法载入mysql扩展
2010/03/12 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
JS实现多选框的操作
2020/06/24 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
python实现目录树生成示例
2014/03/28 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
利用Python获取操作系统信息实例
2016/09/02 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Python的条件锁与事件共享详解
2019/09/12 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
文秘自荐信
2013/10/20 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
职务任命书范本
2014/06/05 职场文书
擅自离岗检讨书
2014/09/12 职场文书
施工员岗位职责范本
2015/04/11 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书