前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python日期和时间的操作方法汇总

python日期和时间的操作方法汇总

作者头像
生信修炼手册
发布2020-05-25 15:45:08
2.4K0
发布2020-05-25 15:45:08
举报
文章被收录于专栏:生信修炼手册生信修炼手册

欢迎关注”生信修炼手册”!

日期和时间可以说是一种独特的数据类型,既不同于数字,也不同于字符串,而且有自己独特的运算规则。在不同的编程语言中,都会将日期和时间与常规的数据类型独立开来,单独进行操作。在python的内置模块中,时间与日期相关的有以下3个

  1. datatime
  2. time
  3. calendar

在实际开发中,处理日期和时间主要有以下3种场景

  1. 获取当前的日期和时间
  2. 格式化日期和时间
  3. 计算两个时间的差值

在进行日期和时间操作前,我们必须先理解以下几个常用的术语

  1. 格林威治标准时间,英文缩写为GMT是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间
  2. 时间起点,国际标准的时间起点为1970年1月1日00:00:00
  3. 时间戳,当前时间与时间起点之间经过的秒数
  4. 时区,不同国家,地区之间存在时差,为了方便换算,规定格林尼治天文台为中时区,依次为零点,每15经度定义一个时区,每个时区时差为1小时,全球共划分为24个时区
  5. 夏令时,英文缩写为DST,是一种人为规定的时间制度,在夏季将时间调快1小时,以达到早睡早起,节约能源的目的,在秋冬季的某一天再将时间调整回来。世界范围内有一百多个国家实行夏令时制度,每个国家的夏令时起止时间不同,我国从1992年之后,不再实行夏令时

下面来看每个模块的常见用法

1. time

该模块主要用来获取当前时间,并进行格式化,基本用法如下

代码语言:javascript
复制
>>> import time
# 返回时间戳
>>> time.time()
1589853649.8406465
# 以struc_time元组的形式返回当前时间
>>> time.localtime()
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=19, tm_hour=9, tm_min=6, tm_sec=56, tm_wday=1, tm_yday=140, tm_isdst=0)
# 以struc_time元组的形式返回当前时间
>>> time.gmtime()
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=19, tm_hour=2, tm_min=0, tm_sec=8, tm_wday=1, tm_yday=140, tm_isdst=0)

struc_time元组包含了9个元素,每个元素的含义如下

  1. tm_year, 表示年份,四位数
  2. tm_mon, 表示月份,1到12之间的一个数字
  3. tm_mday,表示每月的第几天,1到31之间的一个数字
  4. tm_hour, 表示小时,0到23之间的一个数字
  5. tm_min, 表示分钟数,0到59之间的一个数字
  6. tm_sec, 表示秒数,0到61之间第一个数字
  7. tm_wday,表示星期,0到6之间的一个数字,0表示星期一,依次类推
  8. tm_yaday,表示一年中的第几日,1到366之家的一个数字
  9. tm_isdst, 是否为夏令时,1表示是,0表示否,-1表示未知

struc_time元组可以轻松访问其中的内容,用法如下

代码语言:javascript
复制
>>> time.localtime().tm_year
2020
>>> time.localtime().tm_mon
5
>>> time.localtime().tm_mday
19
>>> time.localtime().tm_hour
10
>>> time.localtime().tm_min
50
>>> time.localtime().tm_sec
18

日期的格式化和字符串格式化类似,内置了格式化标识符,通过strftime函数来进行格式化,每个标识符的作用如下

代码语言:javascript
复制
# %a表示星期的缩写
>>> time.strftime('%a', time.localtime())
'Tue'
# %A表示星期的全称
>>> time.strftime('%A', time.localtime())
'Tuesday'
# %b表示月份的缩写
>>> time.strftime('%b', time.localtime())
'May'
# %B表示月份的全称
>>> time.strftime('%B', time.localtime())
'May'
# %c表示
>>> time.strftime('%c', time.localtime())
'Tue May 19 09:33:57 2020'
# %d表示每月的第几天
>>> time.strftime('%d', time.localtime())
'19'
# %H为十进制表示的小时, 24小时制,范围为00-23
>>> time.strftime('%H', time.localtime())
'09'
# %I为十进制表示的小时,12小时制,范围为01-12
>>> time.strftime('%I', time.localtime())
'09'
# %j表示一年中的第几天
>>> time.strftime('%j', time.localtime())
'140'
# %m表示十进制的月份,范围为01-12
>>> time.strftime('%m', time.localtime())
'05'
# %M表示十进制的分钟,范围为00到59
>>> time.strftime('%M', time.localtime())
'34'
# %p表示上午或者下午,值为AM或PM
>>> time.strftime('%p', time.localtime())
'AM'
# %S表示秒数,范围00到61
>>> time.strftime('%S', time.localtime())
'36'
# %U表示一年中的周数,范围为00-53
>>> time.strftime('%U', time.localtime())
'20'
# %w表示一周中的第几天,范围0-6,0表示星期日,以此类推
>>> time.strftime('%w', time.localtime())
'2'
# %W表示一年中的周数,范围为00-53
>>> time.strftime('%W', time.localtime())
'20'
# %x以本地规则表示日期
>>> time.strftime('%x', time.localtime())
'05/19/20'
# %X以本地规则表示时间
>>> time.strftime('%X', time.localtime())
'09:34:51'
# %y表示没有世纪的年份,即4位数年份的后两位
>>> time.strftime('%y', time.localtime())
'20'
# %Y表示完整年份
>>> time.strftime('%Y', time.localtime())
'2020'
# %z表示时区偏移
>>> time.strftime('%z', time.localtime())
'+0800'
# %Z 表示时区名称
>>> time.strftime('%Z', time.localtime())
'CST'
# %% 表示一个百分号字面值
>>> time.strftime('%%', time.localtime())
'%'

如果只是简单的格式化当前日期,内置的函数acstime和ctime是最简单的方式,当然也可以用多种格式化标识符进行组合,灵活的格式化日期,用法如下

代码语言:javascript
复制
>>> time.asctime()
'Tue May 19 10:52:51 2020'

>>> time.ctime()
'Tue May 19 09:59:11 2020'

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
'2020-05-19 09:50:50'

2. datetime

datetime是日期和时间处理的基本模块,当然也支持获取当前日期和格式化,其更独特的功能是进行时间的运算,比如计算两个日期之间差了几天,用法如下

代码语言:javascript
复制
>>> import datetime
# 获取当前日期
>>> a = datetime.date.today()
>>> datetime.date.today()
datetime.date(2020, 5, 19)
# 获取年,月,日
>>> a.year
2020
>>> a.month
5
>>> a.day
19
# 格式化
>>> a.isoformat()
'2020-05-19'

# 获取当前的日期和时间
>>> datetime.datetime.now()
datetime.datetime(2020, 5, 19, 10, 56, 50, 225742)
>>> a = datetime.datetime.now()
# 获取年,月,日,时,分,秒
>>> a.year
2020
>>> a.month
5
>>> a.day
19
>>> a.hour
10
>>> a.minute
56
>>> a.second
53

# 计算前一天的时间
>>> datetime.datetime.now() -  datetime.timedelta(days = 1)
datetime.datetime(2020, 5, 18, 11, 5, 40, 612206)
# 计算1小时后的时间
>>> datetime.datetime.now() +  datetime.timedelta(seconds  = 3600)
datetime.datetime(2020, 5, 19, 12, 8, 3, 839407)

3. calendar

该模块用于处理日历信息,内置了月份和星期的列表,可以当做一个常量来使用,用法如下

代码语言:javascript
复制
# 月份的列表
>>> [i for i in calendar.month_name]
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
# 星期的列表
>>> [i for i in calendar.day_name]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

除此之外,也提供了一些年份相关的函数

代码语言:javascript
复制
# 判断一个年份是否为闰年
>>> calendar.isleap(1997)
False
>>> calendar.isleap(2020)
True
# 返回两个年份间闰年的个数
>>> calendar.leapdays(1997, 2020)
5

对于日期和时间而言,最常用的还是time和datetime两个模块,掌握常用的日期获取和格式化操作,就足够应付大多数的开发需求了。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档