calendar
import calendar
year = calendar.calendar(2020,w=3,l=1,c=8)#c:每月間隔距離;w:每日寬度間隔;l:每星期行數
print(year)
"""
2020
January February March
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 1 2 1
6 7 8 9 10 11 12 3 4 5 6 7 8 9 2 3 4 5 6 7 8
13 14 15 16 17 18 19 10 11 12 13 14 15 16 9 10 11 12 13 14 15
20 21 22 23 24 25 26 17 18 19 20 21 22 23 16 17 18 19 20 21 22
27 28 29 30 31 24 25 26 27 28 29 23 24 25 26 27 28 29
30 31
April May June
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 1 2 3 1 2 3 4 5 6 7
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28
27 28 29 30 25 26 27 28 29 30 31 29 30
July August September
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 1 2 1 2 3 4 5 6
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27
27 28 29 30 31 24 25 26 27 28 29 30 28 29 30
31
October November December
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 1 1 2 3 4 5 6
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31
"""
#isleap(year)#該函數的作用是判斷某個年份到底是不是閏年。如果是則返回True,否則返回的是False。
print(calendar.isleap(2020))#Ture
#leapdays(y1,y2)判斷兩個年份之間有多少個閏年,包含y1,但是不包含y2,
print(calendar.leapdays(2000, 2021))#6
#month(year,month,w=2,l=1)該函數返回的是year年的month月的日曆,只有兩行標題,一周一行。
print(calendar.month(2021,2, w=4, l=2))#w左右寬度,l是上下高度
"""
February 2021
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
"""
#monthcalendar(year,month)通過列表的形式返回year年month月的日曆,列表中還是列表形式。每個子列表是一個星期。如果沒有本月的日期則用0表示。每個子列表都是從星期1開始的,特點概括如下:每個子列表代表的是一個星期;從星期一到星期日,沒有出現在本月的日期用0代替
print(calendar.monthcalendar(2021,4))#[[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, 0, 0]]
#monthrange(year,month)該函數返回的結果是一個元組,元組中有兩個數值(a,b).數值a代表的是該月從星期幾開始;規定6代表星期天,取值為0-6;數值b代表該月總共有多少天
print(calendar.monthrange(2021,1))#(4, 31)
#weekday(y,m,d)weekday方法是輸入年月日,我們便可知道這天是星期幾;返回值是0-6,0代表星期1,6代表星期天
print(calendar.weekday(2021,2,3))#2
print(calendar.weekheader(2))#Mo Tu We Th Fr Sa Su
print(calendar.weekheader(3))#Mon Tue Wed Thu Fri Sat Sun
print(calendar.weekheader(8))# Mon Tue Wed Thu Fri Sat Sun
'''
time
import time
print(time.time())#獲取當前時間的時間戳。1612322294.6218581
#time.localtime的參數默認是time.time()的時間戳,可以自己輸入某個時間戳來獲取其對應的時間:默認當前時間戳;指定某個時間戳
print(time.localtime())#列印當前的時間,得到的結果是時間元組time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=11, tm_min=18, tm_sec=14, tm_wday=2, tm_yday=34, tm_isdst=0)
print(time.localtime(000000))#time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
#ctime的參數默認是時間戳;如果沒有,也可以指定一個時間戳
print(time.ctime())#Wed Feb 3 11:18:14 2021
print(time.ctime(10))#Thu Jan 1 08:00:10 1970
#time.asctime的參數為空時,默認是以time.localtime的值為參數,得到當前的日期、時間、星期;另外,我們也可以自己設置參數,參數是時間元組:使用當前時間的默認時間元組localtime;自己指定一個時間元組
print(time.asctime())#Wed Feb 3 11:18:14 2021
print(time.asctime(time.localtime(10)))#Thu Jan 1 08:00:10 1970
print(time.gmtime())#格林威治時間time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=3, tm_min=18, tm_sec=14, tm_wday=2, tm_yday=34, tm_isdst=0)
#mktime,mktime()也是以時間元組為參數的,它返回的是時間戳,相當於是localtime的逆向過程:
print(time.mktime(time.localtime()))#1612322860.0
#strftime()是按照我們指定的格式將時間元組轉化為字符串;如果不指定時間元組,默認是當前時間localtime()。
print(time.strftime('%Y-%m-%d %H:%M:%S %W %U %x %X'))#2021-02-03 11:30:54 05 05 02/03/21 11:30:54
#strptime()是將字符串轉化為時間元組,我們需要特別注意的是,它有兩個參數:待轉化的字符串;時間字符串對應的格式,
print(time.strptime('2021-02-03 11:30:54','%Y-%m-%d %H:%M:%S'))
datetime
import datetime
print(datetime.MAXYEAR)#9999
print(datetime.MINYEAR)#1
today = datetime.date.today()
print(today)#2021-02-03
print("當前日期:",today) # 當前日期: 2021-02-03
print("當前日期(字符串):",today.ctime()) # 返回日期的字符串 Wed Feb 3 00:00:00 2021
print("時間元組信息:",today.timetuple()) # 當前日期的時間元組信息 time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=34, tm_isdst=-1)
print("年:",today.year) # 返回today對象的年份 2021
print("月:",today.month) # 返回today對象的月份 2
print("日:",today.day) # 返回today對象的日 3
print("星期:",today.weekday()) # 0代表星期一,類推 2
print("公曆序數:",today.toordinal()) # 返回公曆日期的序數 737824
print("年/周數/星期:",today.isocalendar()) # 返回一個元組:一年中的第幾周,星期幾 (2021, 5, 3)
#轉換
print(datetime.date.fromordinal(today.toordinal())) #2021-02-03
import time
print(datetime.datetime.fromtimestamp(time.time()))#2021-02-03 11:45:29.618683
#顯示
print(today)# 2020-12-26 默認連接符號是-
print(today.strftime("%Y/%m/%d")) # 指定連接符# 2020/12/26
print(today.strftime("%Y:%m:%d"))# 2020:12:26
print(today.strftime("%Y/%m/%d %H:%M:%S")) # 轉化為具體的時間# 2020/12/26 00:00:00
#修改
d1 = datetime.date(2021, 2, 3)
d2 = d1.replace(2020, 1, 2)
d3 = d2.replace(year=2022, month=3, day=4)
print(d1, d2, d3)#2021-02-03 2020-01-02 2022-03-04
#time類也是要生成time對象,包含hour、minute、second、microsecond
t = datetime.time(10,20,30,40)
print(t.hour) # 時分秒10
print(t.minute)#20
print(t.second)#30
print(t.microsecond) # 微秒40
#datetime類包含date類和time類的全部信息
print(datetime.date.today())#2021-02-03
print(datetime.datetime.now())#2021-02-03 11:54:26.797584
print(datetime.datetime.utcnow())# 返回當前UTC日期和時間的datetime對象#2021-02-03 03:54:59.721564
print(datetime.datetime.fromtimestamp(1697302830)) # 時間戳的datetime對象#2023-10-15 01:00:30
print(datetime.date.fromordinal(699000))#1914-10-19
print(datetime.datetime.combine(datetime.date(2020,12,25), datetime.time(11,22,54))) # 拼接日期和時間#2020-12-25 11:22:54
print(datetime.datetime.strptime("2020-12-25","%Y-%m-%d"))#2020-12-25 00:00:00
d = datetime.datetime(2020,12,25,11,24,23)
print(d.date())#2020-12-25
print(d.time())#11:24:23
print(d.timetz()) # 從datetime中拆分出具體時區屬性的time#11:24:23
print(d.replace(year=2021,month=1)) # 替換2021-01-25 11:24:23
print(d.timetuple()) # 時間元組time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=11, tm_min=24, tm_sec=23, tm_wday=4, tm_yday=360, tm_isdst=-1)
print(d.toordinal()) # 和date.toordinal一樣737784
print(d.weekday())#4
print(d.isoweekday())#5
print(d.isocalendar())#(2020, 52, 5)
print(d.isoformat())#2020-12-25T11:24:23
print(d.strftime("%Y-%m-%d :%H:%M:%S")) #2020-12-25 :11:24:23
#timedelta對象表示的是一個時間段,即兩個日期date或者日期時間datetime之間的差;支持參數:weeks、days、hours、minutes、seconds、milliseconds、microseconds
print(datetime.date.today() + datetime.timedelta(days=7))#2021-02-10
print(datetime.datetime.now() + datetime.timedelta(hours=7))#2021-02-03 21:39:50.573007
print(datetime.datetime.now() + datetime.timedelta(minutes=5))#2021-02-03 14:46:09.220255
print(datetime.datetime.now() + datetime.timedelta(weeks=5))#2021-03-10 14:41:46.380094
print(datetime.datetime.now() - datetime.timedelta(weeks=5))#2020-12-30 14:42:03.658650
print(datetime.datetime(2021,2,3) - datetime.datetime(2021,1,21,20,11,30))#12 days, 3:48:30
print((datetime.datetime(2021,2,3) - datetime.datetime(2021,1,21,20,11,30)).days)#12
print((datetime.datetime(2021,2,3) - datetime.datetime(2021,1,21,20,11,30)).seconds)#13710
print((datetime.datetime(2021,2,3) - datetime.datetime(2021,1,21,20,11,30)).total_seconds())#1050510.0
#tzinfo本地時間指的是我們系統本身設定時區的時間。datetime類有一個時區屬性tzinfo。tzinfo是一個關於時區信息的類,是一個抽象的基類,不能直接被實例化來使用。它的默認值是None。
tz_utc_8 = datetime.timezone(datetime.timedelta(hours=8))
print(tz_utc_8)#UTC+08:00
now = datetime.datetime.now()
print(now)#2021-02-03 14:53:35.939091
new_time = now.replace(tzinfo=tz_utc_8)
print(new_time)#2021-02-03 14:54:34.387381+08:00
#我們先通過utcnow()獲取到當前的UTC時間
utc_now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) # 指定utc時區
print(utc_now)#2021-02-03 06:56:03.336650+00:00
#通過astimezone()將時區指定為我們想轉換的時區,比如東八區(北京時間):# 通過astimezone切換到東八區
beijing = utc_now.astimezone(datetime.timezone(datetime.timedelta(hours=8)))
print(beijing)#2021-02-03 14:57:04.154792+08:00
#用同樣的方法切到東九區,東京時間:# UTC時區切換到東九區:東京時間
tokyo = utc_now.astimezone(datetime.timezone(datetime.timedelta(hours=9)))
print(tokyo)#2021-02-03 15:58:31.676993+09:00
#還可以直接從北京時間切換到東京時間:# 北京時間(東八區)直接切換到東京時間(東九區)
tokyo_new = beijing.astimezone(datetime.timezone(datetime.timedelta(hours=9)))
print(tokyo_new)#2021-02-03 15:58:31.676993+09:00
#時間戳轉成日期:時間戳轉成具體時間,我們需要兩個函數:time.localtime:將時間戳轉成時間元組形式time.strftime:將時間元組數據轉成我們需要的形式
import time
a = time.time()
print(a)#1612335710.4596128
b = time.localtime(1612335710.4596128)
print(b)#time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour=15, tm_min=1, tm_sec=50, tm_wday=2, tm_yday=34, tm_isdst=0)
print(time.strftime("%Y-%m-%d %H:%M:%S", b))#2021-02-03 15:01:50
#不想指定具體的格式,只想獲取時間戳對應的時間,直接通過time.ctime即可:
print(time.ctime(1612335710.4596128))#Wed Feb 3 15:01:50 2021
#日期時間轉成時間戳格式,我們需要使用兩個方法:strptime():將時間轉換成時間數組mktime():將時間數組轉換成時間戳
date = "2020-12-26 11:45:34"
# 1、時間字符串轉成時間數組形式
date_array = time.strptime(date, "%Y-%m-%d %H:%M:%S")
# 2、查看時間數組數據
print("時間數組:", date_array)#時間數組: time.struct_time(tm_year=2020, tm_mon=12, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=5, tm_yday=361, tm_isdst=-1)
# 3、mktime時間數組轉成時間戳
print(time.mktime(date_array))#1608954334.0
#格式化時間strptime():將時間轉換成時間數組strftime():重新格式化時間
old = "2020-12-12 12:28:45"
# 1、轉換成時間數組
time_array = time.strptime(old, "%Y-%m-%d %H:%M:%S")
# 2、轉換成新的時間格式(20201212-20:28:54)
new = time.strftime("%Y%m%d-%H:%M:%S",time_array) # 指定顯示格式
print("原格式時間:",old)#原格式時間: 2020-12-12 12:28:45
print("新格式時間:",new)#新格式時間: 20201212-12:28:45
#指定格式獲取當前時間:time.time():獲取當前時間,time.localtime():轉成時間元組,time.strftime():重新格式化時間
# 1、時間戳
old_time = time.time()
# 2、時間元組
time_array = time.localtime(old_time)
# 3、指定格式輸出
new_time = time.strftime("%Y/%m/%d %H:%M:%S", time_array)
print(new_time)#2021/02/03 15:10:20