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访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python实现新浪博客备份的方法
Apr 27 Python
详解python中requirements.txt的一切
Mar 03 Python
Python使用剪切板的方法
Jun 06 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
Jul 07 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
django之自定义软删除Model的方法
Aug 14 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
python使用建议技巧分享(三)
Aug 18 Python
python安装mysql的依赖包mysql-python操作
Jan 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获取淘宝分类id示例
2014/01/16 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
微信小程序解析富文本过程详解
2019/07/13 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
python绘制中国大陆人口热力图
2018/11/07 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Python如何对齐字符串
2020/07/30 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
优秀企业获奖感言
2014/02/01 职场文书
高中生家长寄语大全
2014/04/03 职场文书
大学生学期个人总结
2015/02/12 职场文书
新课程改革心得体会
2016/01/22 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python