Python(十三)时间相关time datetime calendar

https://www.cnblogs.com/awakenedy/articles/9182036.html

https://www.cnblogs.com/fclbky/articles/4098204.html

https://blog.csdn.net/sunjinjuan/article/details/79080068

https://www.cnblogs.com/lichunl/p/9098024.html

 

目录

Time 模块

日历(Calendar)模块

Datetime模块


在Python中表示时间的方式有:

  • 时间戳:表示的是从1970年1月1日00:00开始按秒计算的偏移量。 time.time()用于获取当前时间戳,返回的是float类型。
  • 格式化的时间字符串:‘1998-01-01’     time.strftime()用于实现格式化日期。
    %y两位数的年份表示(00-99)%m月份(01-12)
    %Y四位数的年份表示(000-9999)%d月内中的一天(0-31)
    %H24小时制小时数(0-23)%I12小时制小时数(01-12)
    %M分钟数(00-59)%S秒(00-59)
    %a本地简化星期名称(‘Sun’)%A本地完整星期名称(‘Sunday’)
    %b本地简化的月份名称(‘Sep’)%B本地完整的月份名称
    %c本地相应的日期表示和时间表示%j年内的一天(001-366)
    %p显示本地为A.M.还是P.M.的等价符%x本地相应的日期表示('09/22/19')
    %U一年中的星期数(00-53)星期天为星期的开始%X本地相应的时间表示('21:17:55')
    %W一年中的星期数(00-53)星期一为星期的开始%Z当前时区的名称
    %w星期几(0-6),星期天为星期的开始%%%号本身
  • 时间元组struct_time (共九个元素0-8):返回struct_time的函数主要有:gmtime()、localtime()、strptime()。
    序号index属性值values
    04位数年(tm_year)2008
    1月(tm_mon)1-12
    2日(tm_mday)1-31
    3小时(tm_hour)0-23
    4分钟(tm_min)0到59
    5秒(tm_sec)0到61 (60或61 是闰秒)
    6一周的第几日(tm_wday)0到6 (0是周一)
    7一年的第几日(tm_yday)1到366 (儒略历)
    8夏令时(tm_isdst)-1, 0, 1, -1是决定是否为夏令时的旗帜

注意:由于Python的time模块主要调用C库,因为这些函数的语义因平台而异,所以使用时最好查阅平台相关文档。

1、时间戳:
>>> import time 
>>> time.time()
1569156835.5634894

2、格式化时间: time.strftime()
>>> time.strftime('%Y-%m-%d-%M-%S %A %j')
'2019-09-22-21-28 Sunday 265'

3、时间元组
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=22, 
tm_hour=21, tm_min=32, tm_sec=51, tm_wday=6,
 tm_yday=265, tm_isdst=0)


>>> print(time.mktime(time.localtime(100000000)))
100000000.0

>>> print(time.strptime('1999-09-09'))
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    print(time.strptime('1999-09-09'))
  File "D:\python\anzhuang\lib\_strptime.py", line 559, in _strptime_time
    tt = _strptime(data_string, format)[0]
  File "D:\python\anzhuang\lib\_strptime.py", line 362, in _strptime
    (data_string, format))
ValueError: time data '1999-09-09' does not match format '%a %b %d %H:%M:%S %Y'
>>> print(time.strptime('1999-09-09','%Y-%m-%d'))
time.struct_time(tm_year=1999, tm_mon=9, tm_mday=9, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=252, tm_isdst=-1)

>>> print(time.strftime('%d/%m/%Y %H:%M:%S',time.localtime(100000000)))
03/03/1973 17:46:40

>>> time.asctime()
'Sun Sep 22 22:11:14 2019'
>>> time.ctime()
'Sun Sep 22 22:12:28 2019'

Time 模块

Time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的:

序号函数及描述
1time.altzone
返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
2time.asctime([tupletime])
接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
3time.clock( )
用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
4time.ctime([secs])
作用相当于asctime(localtime(secs)),未给参数相当于asctime()
5time.gmtime([secs])
接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
6time.localtime([secs])
接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
7time.mktime(tupletime)
接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)。
8time.sleep(secs)
推迟调用线程的运行,secs指秒数。
9time.strftime(fmt[,tupletime])
接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
根据fmt的格式把一个时间字符串解析为时间元组。
11time.time( )
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
12time.tzset()
根据环境变量TZ重新初始化时间相关设置。

time.sleep()函数:用于将当前线程交出,要求它等待系统将再次唤醒,如果写程序只有一个线程,这十几上就会阻塞进程,什么也不做。        或者理解为线程推迟指定的时间运行,单位为秒,表示进程挂起的时间。

日历(Calendar)模块

此模块的函数都是日历相关的,例如打印某月的字符月历。

星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。模块包含了以下内置函数:

序号函数及描述
1calendar.calendar(year,w=2,l=1,c=6)
返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
2calendar.firstweekday( )
返回当前每周起始日期的设置。默认情况下,首次载入 calendar 模块时返回 0,即星期一。【配合setfirstweekday()作更改】
3

calendar.isleap(year) 

是闰年返回 True,否则为 False。

>>> print(calendar.isleap(2000)) 返回为:True

>>> print(calendar.isleap(1900)) 返回为:False

4calendar.leapdays(y1,y2)
返回在Y1,Y2两年之间的闰年总数。
5calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
6calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表。每个子列表代表一个星期的排列。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。如1号为周六则第一个子列表为[0,0,0,0,0,1,2]。
7calendar.monthrange(year,month)
返回两个整数。第一个是该月首日是星期几的日期码,第二个是该月的天数日期码。日从0(星期一)到6(星期日);月从1到12。
8calendar.prcal(year,w=2,l=1,c=6)
相当于 print calendar.calendar(year,w=2,l=1,c=6)
9calendar.prmonth(year,month,w=2,l=1)
相当于 print calendar.month(year,month,w=2,l=1) 。
10calendar.setfirstweekday(weekday)
设置每周的起始日期码。0(星期一)到6(星期日)。
11calendar.timegm(tupletime)
和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)。
12calendar.weekday(year,month,day)
返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

Datetime模块

datatime模块重新封装了time模块,提供更多接口,其中包含如下类:

类名功能说明
date日期对象,常用的属性有year, month, day
time时间对象
datetime日期时间对象,常用的属性有hour, minute, second, microsecond
datetime_CAPI日期时间对象C语言接口
timedelta时间间隔,即两个时间点之间的长度
tzinfo时区信息对象

datetime模块中包含的常量:

功能说明用法返回值
MAXYEAR返回能表示的最大年份datetime.MAXYEAR9999
MINYEAR返回能表示的最小年份datetime.MINYEAR1

①、date类datetime.date(year, month, day)

date.max/mindate对象所能表示的最大/最小日期
date.resolutiondate对象表示日期的最小单位,这里单位为天
date.today()返回一个表示当前本地日期的date对象
date.fromtimestamp(timestamp)根据给定的时间戮,返回一个date对象
d1.year / d1.month / d1.day返回定义后的某个date(d1)的年/月/日
d1.replace(y,month,day)生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
d1.timetuple()返回日期对应的time.struct_time对象;
d1.weekday()返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
d1.isoweekday()返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
d1.isocalendar(datetime.date.now() ) 需传入一个date类型的参数,返回该参数对象的year、本年度第几周星期几(星期一返回1)
d1.isoformat()返回格式如 'YYYY-MM-DD’ 的字符串;
d1.strftime(fmt)和time模块format相同。返回自定义格式的时间字符串,fmt是自定义的时间格式。
>>> import datetime
>>> datetime.date.max
datetime.date(9999, 12, 31)
>>> print (datetime.date.min)
0001-01-01

>>> datetime.date.fromtimestamp(time.time())
datetime.date(2019, 9, 23)
>>> print( datetime.date.fromtimestamp(time.time()))
2019-09-23

>>> datetime.date.isocalendar(datetime.date.today())
(2019, 39, 1)   # 表示今天是2019年中的第39周,星期一

>>> (datetime.date.today()).strftime('%Y-%m-%d %H:%M:%S')
'2019-09-23 00:00:00'   

②、time类:datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ) 

time.max/mintime类所能表示的最大/最小时间
time.resolution时间的最小单位,这里是1微秒
t1.hour / t1.minute / t1.second / t1.microsecond返回定义后的某个time(t1)的时/分/秒/毫秒
t1.replace(hour,[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ) 生成一个新的时间对象,用参数指定的时,分,秒,毫秒代替原有对象中的属性。(原有对象仍保持不变)
t1.isoformat()返回格式如 'HH:MM:SS’ 的字符串;
t1.strftime(fmt)和time模块format相同。返回自定义格式的时间字符串,fmt是自定义的时间格式。
>>> a = datetime.time(19, 35, 55,899)
>>> a.microsecond
899

>>> datetime.time.max
datetime.time(23, 59, 59, 999999)
>>> datetime.time.min
datetime.time(0, 0)

>>> a.isoformat()
'19:35:55.000899'
>>> a.strftime('%H:%M:%S')
'19:35:55'

③、datetime类:datetime相当于date和time结合起来。

datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

dt.year / month / day / hour / minute / second / microsecond / tzinfo
dt.date() / dt.time()获取date对象/ time对象
dt.replace(year[,month[,day[,hour[,mintue[,second[,microsecond[,tzinfo] ] ] ] ] ] ])
dt.timetuple()  / dt.utctimetuple()dt.weekday() / dt.isocalendar()
dt.ctime()返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()))
datetime.today()返回一个表示当前本地时间的datetime对象
datetime.now([ tz ])返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
datetime.utcnow()返回一个当前utc时间的datetime对象;#格林威治时间
datetime.fromtimestamp(timestamp[,tz])根据时间戮创建一个datetime对象,参数tz指定时区信息;
datetime.utcfromtimestamp(timestamp[,tz])根据时间戮创建一个datetime对象;
datetime.combine(date, time)根据date和time,创建一个datetime对象;
datetime.strptime(date_string,format)将格式字符串转换为datetime对象,fmt是自定义的时间格式。

④、timedelta类:timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)

>>> today = datetime.date.today()   #获取当前日期
>>> today
datetime.date(2019, 9, 23)

#获取上月最后一天的日期:timedelta(1)即为timedelta(days=1)
>>> mlast_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
>>> mlast_day
datetime.date(2019, 8, 31)

#获取时间差
>>> start = datetime.datetime.now()
>>> end = datetime.datetime.now()
>>> (end - start).seconds
26
>>> (end - start).microseconds
185029
#差值不止可以查看相差多少秒(seconds),还可以查看天(days),  微秒(microseconds)

#计算此时向后6小时的时间
>>> d1 = datetime.datetime.now()
>>> d2 = d1 + datetime.timedelta(hours = 6)
>>> d2
datetime.datetime(2019, 9, 24, 2, 18, 55, 913976)
#可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds)


#计算上一个周一和周日的日期
>>> today = datetime.date.today()    #返回为:datetime.date(2019, 9, 23)
>>> today_weekday = today.isoweekday()  #获取今天是周几的信息(周一为1,周五为5)
>>> last_sunday = today - datetime.timedelta(days=today_weekday)  
#如:今天为周五则减去5就为上个周日;   返回为:datetime.date(2019, 9, 22)
>>> last_monday = last_sunday - datetime.timedelta(days=6) 
#同理,上个周日减去6天即为上个周一的日期;   返回为:datetime.date(2019, 9, 16)


#指定一个日期,计算那个月的最后一天的日期以及那个月的总共天数
>>> date = datetime.date(2019,2,20)
>>> def lastrq(riqi):
    if riqi.month == 12:
        nextmonth1day = datetime.date(riqi.year + 1, 1, 1)
    else:
        nextmonth1day = datetime.date(riqi.year , riqi.month + 1, 1)
    return nextmonth1day - datetime.timedelta(1)
>>> lastrq(date)
datetime.date(2019, 2, 28)
>>> lastrq(date).day
28

⑤、tzinfo时区类:tzinfo是关于时区信息的类,是一个抽象类,所以不能直接被实例化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值