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模拟登陆实现代码
Jun 14 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
python多线程扫描端口(线程池)
Sep 04 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python中Switch/Case实现的示例代码
2017/11/09 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
mac使用python识别图形验证码功能
2020/01/10 Python
浅析Python __name__ 是什么
2020/07/07 Python
python字典key不能是可以是啥类型
2020/08/04 Python
物理教育专业毕业生推荐信
2013/11/03 职场文书
中医药大学毕业生自荐信
2013/11/08 职场文书
门卫人员岗位职责
2013/12/24 职场文书
建筑人员岗位职责
2013/12/25 职场文书
工作分析计划书
2014/04/30 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
公司员工安全协议书
2014/11/21 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
员工辞退通知书
2015/04/17 职场文书
安全承诺书格式范本
2015/04/28 职场文书
实习介绍信范文
2015/05/05 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
HAM-2000摩机图
2021/04/22 无线电
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
Oracle11g R2 安装教程完整版
2021/06/04 Oracle