社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

生信修炼手册 • 5 年前 • 516 次点击  

欢迎关注”生信修炼手册”!
日期和时间可以说是一种独特的数据类型,既不同于数字,也不同于字符串,而且有自己独特的运算规则。在不同的编程语言中,都会将日期和时间与常规的数据类型独立开来,单独进行操作。在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

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

>>> 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元组可以轻松访问其中的内容,用法如下


>>> time.localtime().tm_year2020>>> time.localtime().tm_mon5>>> time.localtime().tm_mday19>>> time.localtime().tm_hour10>>> time.localtime().tm_min50>>> time.localtime().tm_sec18

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

# %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是最简单的方式,当然也可以用多种格式化标识符进行组合,灵活的格式化日期,用法如下

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



    
>>> import datetime# 获取当前日期>>> a = datetime.date.today()>>> datetime.date.today()datetime.date(2020, 5, 19)# 获取年,月,日>>> a.year2020>>> a.month5>>> a.day19# 格式化>>> a.isoformat()'2020-05-19'
# 获取当前的日期和时间>>> datetime.datetime.now()datetime.datetime(2020, 5, 19, 10, 56, 50, 225742)>>> a = datetime.datetime.now()# 获取年,月,日,时,分,秒>>> a.year2020>>> a.month5>>> a.day19>>> a.hour10>>> a.minute56>>> a.second53
# 计算前一天的时间>>> 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

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

# 月份的列表>>> [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']

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

# 判断一个年份是否为闰年>>> calendar.isleap(1997)False>>> calendar.isleap(2020)True# 返回两个年份间闰年的个数>>> calendar.leapdays(1997, 2020)5

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

·end·

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



原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
  更多精彩



  写在最后


转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。


扫描下方二维码,关注我们,解锁更多精彩内容!


一个只分享干货的

生信公众号







Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/63108
 
516 次点击