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 15 Python
Python与Redis的连接教程
Apr 22 Python
python中while循环语句用法简单实例
May 07 Python
Python合并两个字典的常用方法与效率比较
Jun 17 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
python与字符编码问题
May 24 Python
Python实现最常见加密方式详解
Jul 13 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python飞机大战游戏实例讲解
Dec 04 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入门学习知识点三 PHP上传
2011/07/14 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
理解Python垃圾回收机制
2016/02/12 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
python re的findall和finditer的区别详解
2020/11/15 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
见习报告怎么写
2014/10/31 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
如何正确理解python装饰器
2021/06/15 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技