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中比较特别的除法运算和幂运算介绍
Apr 05 Python
以windows service方式运行Python程序的方法
Jun 03 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
Jul 11 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
python re的findall和finditer的区别详解
Nov 15 Python
ASP.NET Core中的配置详解
Feb 05 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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 获取可变函数参数的函数
2009/08/26 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
Highcharts入门之简介
2016/08/02 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
np.dot()函数的用法详解
2020/01/17 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python实现一个优先级队列的方法
2020/07/31 Python
python 怎样进行内存管理
2020/11/10 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
取保候审保证书
2014/04/30 职场文书
自我管理的活动方案
2014/08/25 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
汉字听写大会观后感
2015/06/12 职场文书