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中运行并行任务技巧
Feb 26 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
python递归实现快速排序
Aug 18 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
Python autoescape标签用法解析
Jan 17 Python
Python3 assert断言实现原理解析
Mar 02 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
超级实用的8个Python列表技巧
Aug 24 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/06/04 PHP
php模板函数 正则实现代码
2012/10/15 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
详解php命令注入攻击
2019/04/06 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
python递归计算N!的方法
2015/05/05 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python实现验证码识别功能
2018/06/07 Python
python解决字符串倒序输出的问题
2018/06/25 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
三年级科学教学反思
2014/01/29 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
技术入股协议书
2016/03/22 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
商业计划书之服装
2019/09/09 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS