我是靠谱客的博主 乐观星月,这篇文章主要介绍9.日期和时间,现在分享给大家,希望可以做个参考。

1.time模块

1.1 time函数

time函数用于返回当前时间的时间戳,返回的是浮点数。

import time

now = time.time()
print("%f" %now)

 

1.2 localtime函数

localtime函数将时间戳格式化为本地时间,返回struct_time对象。可以自己设置时间戳,不设置默认当前时间戳。

import time

print(time.localtime())
print(time.localtime(0))

 

1.3 mktime函数

mktime函数与gmtime,localtime函数相反的操作,接收struct_time作为参数,返回用秒来表示时间的浮点数

struct_time(年,月,日,时,分,秒,一周的第几日(0-6),一年的第几日(1-365),夏令时)

import time

t = (2020,9,27,15,0,0,6,271,0)

secs = time.mktime(t)
print("%f"% secs)

print("%f" % time.mktime(time.localtime(secs)))

 

1.4 gmtime函数

gmtime函数将一个时间戳转换为UTC时区的struct_time,可选的参数表示从1970-1-1以来的描述,默认值为time.time()

import time

print(time.gmtime())
print(time.gmtime(0))

 

1.5 asctime函数

asctime函数接受时间元组并返回一个可读的时间(Tue Jul 17 17:03:01 2018)

import time

t=(2018,7,17,17,3,1,1,1,0)

print(time.asctime(t))
print(time.asctime(time.localtime()))

 

1.6 ctime函数

ctime函数把一个时间戳转化为time.asctime()形式

import time

print("%s" % time.ctime())
print("%s" % time.ctime(0))

 

1.7 sleep函数

sleep函数推迟调用线程的运行,可通过参数指定秒数

import time

print("%s" % time.ctime())
time.sleep(3)
print("%s" % time.ctime())

 

1.8 clock函数

clock函数以浮点数计算的描述返回当前CPU时间

 

1.9 strftime

strftime函数用于接收时间元组,并返回可读字符串表示的当地时间

import time

t=(2018,7,17,17,3,1,1,1,0)

t = time.mktime(t)
print(time.strftime("%b %d %Y %H:%M:%S",time.gmtime(t)))

 

1.10 strptime

strptime函数根据指定的格式把一个时间字符串解析成元组

import time

struct_time = time.strptime("Jul 17 2018 09:03:01","%b %d %Y %H:%M:%S")

print(struct_time)

 

2.datetime模块

2.1 date对象

import datetime

#指定格式日期
print(datetime.date(2020,9,27))
#2020-09-27

#返回当天日期
print(datetime.date.today())
#2020-09-29

#返回今天周几(0-6)
print(datetime.date.today().weekday())
#1

#返回今天周几(1-7)
print(datetime.date.today().isoweekday())
#2

#以年-月-日输出
print(datetime.date(2020,9,27).isoformat())
#2020-09-27

#自定义格式输出
print(datetime.date(2020,9,27).strftime("%Y-%m-%d"))
#2020-09-27

 

2.2 time对象

time表示时间,与日期无关。

import datetime

#初始时间
time1 = datetime.time()
print(time1)
#00:00:00

#自定义设置时间
time2 = datetime.time(hour=8,second=7)
print(time2)
#08:00:07

#min,max表示时间的最值
print(datetime.time.min)    #00:00:00
print(datetime.time.max)    #23:59:59.999999

#isoformat返回ISO格式,即“HH:MM:SS”的字符串
print(time2.isoformat())
#08:00:07

#strftime格式化输出时间
time3 = datetime.time(hour=16,second=7,microsecond=123)
print(time3.strftime("%H:%M:%S"))          #16:00:07
print(time3.strftime("%p %I:%M:%S:%f"))    #PM 04:00:07:000123

 

2.3 datetime对象

datetime = date + time

import datetime
import time

#设置datetime,其中,年月日是必需,其他选填
dt1 = datetime.datetime(year=2018,month=7,day=1,hour=16,minute=10,second=5)
print(dt1)
#2018-07-01 16:10:05

#返回当前本地datetime
today = datetime.datetime.today()
print(today)
#2020-09-29 10:47:07.453575

#返回当前本地datetime
now = datetime.datetime.now()
print(now)
#2020-09-29 10:47:48.452932

#返回当前UTC的datetime
utcnow = datetime.datetime.utcnow()
print(utcnow)
#2020-09-29 02:48:32.211181

#fromtimestamp根据时间戳创建datetime对象
dt2 = datetime.datetime.fromtimestamp(time.time()-5000)
print(dt2)
#2020-09-29 09:27:22.921779

#date方法获取日期,time方法获取时间
print(now.date())    #2020-09-29
print(now.time())    #10:51:44.298140

#combine根据date和time,创建一个datetime对象
dt3 = datetime.date(2018,7,1)
dt4 = datetime.time(8,5,10)
dt5 = datetime.datetime.combine(dt3,dt4)
print(dt5)
#2018-07-01 08:05:10

#strftime方法格式化输出日期时间
print(dt5.strftime("%Y-%m-%d %H:%M:%S"))      #2018-07-01 08:05:10
print(dt5.strftime("%y-%m-%d %a %I:%M:%S"))   #18-07-01 Sun 08:05:10

 

2.4 timedelta对象

timedelta表示的是两个日期的差。

import datetime
import time

dt1 = datetime.datetime(2018,7,1,4,15,10)
dt2 = dt1 + datetime.timedelta(weeks=-2)

print(dt1)
print(dt2)
print(dt1-dt2)
print(dt2-dt1)

 

2.5 tzinfo对象

datetime和time对象使用tzinfo来提供可自定义的时间调整概念。

tzinfo类不能直接使用,通过datetime.timezone生成。datetime.timezone.utc实现了UTC时区的tzinfo实例。

import datetime
import time

utc_now1 = datetime.datetime.now(datetime.timezone.utc)
utc_now2 = datetime.datetime.utcnow()

print(utc_now1)
print(utc_now2)

本质上来说:datetime.timezone.utc = datetime.timezone(datetime.timedelta(0))

 

3.calendar模块

日历相关的方法。

import calendar

#calendar.isleap:判断是否闰年
print(calendar.isleap(2000))    #True
print(calendar.isleap(2018))    #False

#calendar.leapdays:返回两个年份之间闰年的总数
print(calendar.leapdays(1990,2018))    #7

#calendar.month返回多行字符串格式的年月日历,每日宽度间隔为w字符串,每行的长度为7*w+6。l是每星期的行数
print(calendar.month(2018,7))
print(calendar.month(2018,7,w=3))
print(calendar.month(2018,3,l=3))
"""
  July 2018
Mo Tu We Th Fr Sa Su
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

         July 2018
Mon Tue Wed Thu Fri Sat Sun
                          1
  2   3   4   5   6   7   8
  9  10  11  12  13  14  15
 16  17  18  19  20  21  22
 23  24  25  26  27  28  29
 30  31

     March 2018


Mo Tu We Th Fr Sa Su


          1  2  3  4


 5  6  7  8  9 10 11


12 13 14 15 16 17 18


19 20 21 22 23 24 25


26 27 28 29 30 31
"""

#calendar.monthcalendar方法返回一个整数的单层嵌套列表,每个子列表装载一个星期
print(calendar.monthcalendar(2018,7))
#[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 31, 0, 0, 0, 0, 0]]

#calendar.monthrange返回两个整数组成的元组,第一个整数表示该月的第一天是星期几,第二个整数表示该月的天数
print(calendar.monthrange(2018,7))
#(6, 31)

#calendar.weekday返回给定日期的星期码,从0-6
print(calendar.weekday(2018,7,1))
#6

#calendar.calendar方法返回一个多行字符串格式的年历,3个月一行。间隔距离用c表示。每个宽度间隔为w参数。l参数是每星期的行数
print(calendar.calendar(2018))
"""
                                  2018

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                1  2  3  4
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25
29 30 31                  26 27 28                  26 27 28 29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5  6                   1  2  3
 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30
30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                      1  2
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       3  4  5  6  7  8  9
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      10 11 12 13 14 15 16
16 17 18 19 20 21 22      20 21 22 23 24 25 26      17 18 19 20 21 22 23
23 24 25 26 27 28 29      27 28 29 30 31            24 25 26 27 28 29 30
30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                      1  2
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       3  4  5  6  7  8  9
15 16 17 18 19 20 21      12 13 14 15 16 17 18      10 11 12 13 14 15 16
22 23 24 25 26 27 28      19 20 21 22 23 24 25      17 18 19 20 21 22 23
29 30 31                  26 27 28 29 30            24 25 26 27 28 29 30
                                                    31
"""                                                    

 

4.dateutil介绍

4.1 dateutil库是datetime模块的拓展,不是自带的,需要手动安装

conda install python-dateutil

 

4.2 使用dateutil

dateutil库有两个常见的模块,一个是parser模块,一个是rrule模块

4.2.1 parser模块

可以吧大多数已知格式的时间字符串全都转化为datetime类型

from dateutil.parser import parse

print(parse("Sat Oct 11 11:11:11 UTC 2003"))
print(parse("2018-08-20"))
print(parse("20180821"))
print(parse("12:00:00"))

#fuzzy开启模糊匹配,过滤掉无法识别的时间日期字符
print(parse("这是时间格式20180808",fuzzy=True))

"""
2003-10-11 11:11:11+00:00
2018-08-20 00:00:00
2018-08-21 00:00:00
2020-09-29 12:00:00
2018-08-08 00:00:00
"""

同时,parse还有时区信息,默认起始时间等

 

4.2.2 rrule模块

rrule模块用于计算并生成一些重复的时间规则,并且还支持对计算结果进行缓存

import pprint
from dateutil.rrule import rrule,MONTHLY
from datetime import datetime

start_date = datetime(2011,8,1)
l = list(rrule(freq=MONTHLY,count=4,dtstart=start_date))
pprint.pprint(l)

 

最后

以上就是乐观星月最近收集整理的关于9.日期和时间的全部内容,更多相关9内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(107)

评论列表共有 0 条评论

立即
投稿
返回
顶部