時間
1、Python中最常見以及常用的幾種時間格式
⑴時間戳(timestamp):時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量
⑵時間元組(struct_time):共有九個元素組
⑶格式化時間(format time):可以格式化為固定或者自定義格式,增加可讀性,如2017-11-1
2、時區:世界标準時間UTC(格林威治天文時間)
3、中國時間為:UTC+8,表示東八區
datetime子產品
1、datetime子產品是time類的更新版,可以分别對date(日期)、time(時間)、datetime(日期時間)等三種單獨管理
⑴datetime子產品下定義了5個類:這裡所說的datetime是一個子產品(一個Python檔案),這個子產品下面包含了五個類
⑵其中3個類用于處理日期、時間、日期時間的:date類、time類、datetime類
⑶還有兩個類是用于處理時間間隔和時區:timedelta類和tzinfo類
2、datetime子產品定義了兩個常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份
MINYEAR = 1
MAXYEAR = 9999
3、datetime.datetime類的應用最為普遍且上面這些類型的對象都是不可變(immutable)的
4、datetime子產品下的類:
類名 | 調用方式 | 說明 |
datetime.date | from datetime import date | 表示日期的類。常用的屬性有year, month, day |
datetime.time | from datetime import time | 表示時間的類。常用的屬性有hour, minute, second, microsecond |
datetime.datetime | from datetime import datetime | 表示日期時間的類。date類和time類的綜合 |
datetime.timedelta | from datetime import timedelta | 表示時間間隔,即兩個時間點之間的長度 |
datetime.tzinfo | from datetime import tzinfo | 與時區有關的相關資訊 |
datetime.date類
1、date對象由year年份、month月份及day日期三部分構成
⑴date對象:調用datetime.date類将相當于是建立了一個datetime.date類的執行個體對象
2、Python也是面向對象程式設計語言,是以針對類,就會有構造函數,該類的構造函數如下:
構造函數
datetime.date類的構造函數如下:
class datetime.date(year, month, day)
參數說明
1、year, month和day都是是必須參數
2、year:表示年,取值範圍[MINYEAR, MAXYEAR]
3、month:表示月,取值範圍[1, 12]
4、day:一月中第幾天,取值範圍[1, 指定年份的月份中的天數]
注:當值超過了取值範圍,則會觸發一個ValueError的異常
例1:初始化一個date對象
from datetime import date
#初始化一個date對象
date = date(2014,2,11)#隻能有年月日三個參數
print(date) #傳回一個date對象
print(type(date))
"""
2014-02-11
<class 'datetime.date'>
"""
注:
1、這個其實就是使用類中的構造函數__init__方法來執行個體化一個date對象
2、源碼:
class date:
min: ClassVar[date]
max: ClassVar[date]
resolution: ClassVar[timedelta]
def __init__(self, year: int, month: int, day: int) -> None: ...
datetime.date類的靜态屬性和方法
以下是datetime.date類的一些(類)靜态方法和(類)屬性:直接通過類名調用
類方法/屬性名稱 | 描述 |
date.max | date對象所能表示的最大日期:9999-12-31 |
date.min | date對象所能表示的最小日志:00001-01-01 |
date.resolution | date對象表示的日期的最小機關:天 |
date.today() | 傳回一個表示目前本地日期的date對象 |
date.fromtimestamp(timestamp) | 根據給定的時間戳,傳回一個date對象 |
例2:datetime.date類的靜态方法和屬性
from datetime import date
print("datetime.date類的類屬性max:",date.max)
print("datetime.date類的類屬性min:",date.min)
print("datetime.date類的類屬性resoluation:",date.resolution)
print("datetime.date類的靜态方法_today",date.today())
print("datetime.date類的靜态方法_fromtimestamp",date.fromtimestamp(1117937981))
"""
datetime.date類的類屬性max: 9999-12-31
datetime.date類的類屬性min: 0001-01-01
datetime.date類的類屬性resoluation: 1 day, 0:00:00
datetime.date類的靜态方法_today 2020-08-27
datetime.date類的靜态方法_fromtimestamp 2005-06-05
"""
datetime.date類對象的方法和屬性
1、一個類中肯定會定義很多類方法和類屬性等:我們執行個體化一個date類或傳回一個date類對象後,就可以使用
⑴類外:"執行個體名.類方法名"或"執行個體名.類屬性名"來調用類方法和類屬性。這裡肯定是類外調用
⑵類中:"self.類方法名"或"類名.類屬性"
⑶這個是Python類的通用方法、屬性
2、以下方法和屬性需要通過:datetime.date類的執行個體對象調用(date對象)
對象方法/屬性名稱 | 描述(d表示執行個體對象) |
d.year | 年 |
d.month | 月 |
d.day | 日 |
d.isoformat() | 傳回格式如'YYYY-MM-DD'的字元串 |
d.strftime(format) | 傳入任意格式符,可以輸出對應格式的日期表示形式 |
d.replace(year=,month=,day=) | 生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性(原有對象仍保持不變) |
d.timetuple() | 傳回時間元組struct_time格式的日期 |
d.toordinal() | 傳回日期是是自 0001-01-01 開始的第多少天 |
d.weekday() | 傳回日期是星期幾,[0, 6],0表示星期一 |
d.isoweekday() | 傳回日期是星期幾,[1, 7], 1表示星期一 |
d.isocalendar() | 傳回一個元組,格式為:(year,week,weekday)。week:一年中的第幾周,weekday:目前日期是星期幾 |
例3: 執行個體對象的屬性
from datetime import date
now = date.today()
#now = date(2020,12,12)
print("目前時間的date對象為:",now)
print(type(now))#傳回一個date對象
print("執行個體對象date的year屬性:",now.year)
print("執行個體對象date的month屬性:",now.month)
print("執行個體對象date的day屬性:",now.day)
"""
目前時間的date對象為: 2020-08-27
<class 'datetime.date'>
執行個體對象date的year屬性: 2020
執行個體對象date的month屬性: 8
執行個體對象date的day屬性: 27
"""
例3_1:執行個體對象的replace()方法
from datetime import date
today = date.today() #傳回目前日期
print("目前日期為:",today)
new_day = today.replace(2019,1,1) #新生成一個date對象:年月日
new_day1 = today.replace(2019,1) #新生成一個date對象:年月
new_day2 = today.replace(month=2,day=2) #新生成一個date對象:月日
print("新生成的date對象為:",new_day)
print("新生成的date1對象為:",new_day1)
print("新生成的date2對象為:",new_day2)
print("舊的date對象不變:",today)
"""
目前日期為: 2020-08-27
新生成的date對象為: 2019-01-01
新生成的date1對象為: 2019-01-27
新生成的date2對象為: 2020-02-02
舊的date對象不變: 2020-08-27
"""
例3_2:執行個體對象的strftime()和isoformat()方法
from datetime import date
today = date.today() #傳回目前日期
print("目前日期為:",today)
new_day = today.strftime("%Y/%m/%d") #重新格式化日期格式:傳回自定義格式的時間字元串
new_day1 = today.strftime("%Y{0}%m{1}%d{2}").format("年","月","日")
print(new_day)
print(new_day1)
new_day2 = today.isoformat()#再次重新格式化日期格式:這個方法是寫死了格式的-
print(new_day2)
"""
目前日期為: 2020-08-27
2020/08/27
2020年08月27日
2020-08-27
"""
例3_3:執行個體對象的timetuple()方法
from datetime import date
import time
today = date.today() #傳回目前日期
print("目前日期為:",today)
new_day = today.timetuple()
print(new_day)
#這裡可以使用time類下面的方法将一個時間元組的值轉化為字元串型的時間值
print(time.strftime("%Y-%m-%d %H:%M:%S", new_day))
"""
目前日期為: 2020-08-27
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=27, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=240, tm_isdst=-1)
2020-08-27 00:00:00
"""
datetime.time類
datetime子產品下的time類由:hour小時、minute分鐘、second秒、microsecond毫秒和tzinfo五部分組成
構造函數
datetime.time類的構造函數如下:
class datetime.time(hour, minute, second, microsecond, tzinfo)
參數說明:
1、hour為必須參數,其他為可選參數。各參數的取值範圍為:
2、hour:表示小時,取值範圍[0, 23]
3、minute:表示分鐘,取值範圍[0, 59]
4、second:表示秒數,取值範圍[0, 59]
5、microsecond:表示毫秒數,取值範圍[0, 1000000]
6、tzinfo:表示目前時區,tzinfo的子類對象,如timezone類的執行個體
例4:
from datetime import time
Time = time(5) #這裡也是相當于執行個體化一個time
print("隻有小時數:",Time)
Time1 = time(hour=5,minute=12,second=12,microsecond=121212)
print("完整:",Time1)
print(type(Time1)) #傳回一緻time
"""
隻有小時數: 05:00:00
完整: 05:12:12.121212
<class 'datetime.time'>
"""
datetime.time類的靜态屬性
1、以下是datetime.time類的一些(類)靜态屬性:直接通過類名調用
類方法/屬性名稱 | 描述 |
time.max | time類所能表示的最大時間:time(23, 59, 59, 999999) |
time.min | time類所能表示的最小時間:time(0, 0, 0, 0) |
time.resolution | 時間的最小機關,即兩個不同時間的最小內插補點:1微秒 |
例5:
from datetime import time
print(time.max)
print(time.min)
print(time.resolution)
"""
23:59:59.999999
00:00:00
0:00:00.000001
"""
datetime.time類對象的方法和屬性
1、也是執行個體化一個類對象後(time類)或傳回一個time類對象後,通過其執行個體名來調用
2、以下方法和屬性需要通過:datetime.time類的執行個體對象調用
對象方法/屬性名稱 | 描述 |
t.hour | 時 |
t.minute | 分 |
t.second | 秒 |
t.microsecond | 微秒 |
t.isoformat() | 傳回一個‘HH:MM:SS.%f’格式的時間字元串 |
t.strftime() | 傳回指定格式的時間字元串,與time子產品的strftime(format, struct_time)功能相同 |
t.tzinfo | 時區資訊 |
t.replace(hour,minute,second,microsecond,tzinfo) | 建立一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性(原有對象仍保持不變) |
例6:time對象常用屬性
from datetime import time
Time = time(22, 23, 23, 111) #執行個體化一個time對象:Time
print("時間:",Time)
print("執行個體對象的hour屬性:",Time.hour)
print("執行個體對象的minute屬性:",Time.minute)
print("執行個體對象的second屬性:",Time.second)
print("執行個體對象的microsecond屬性:",Time.microsecond)
print("執行個體對象的tzinfo屬性:",Time.tzinfo) #執行個體化時沒有指明所用時區,是以為None
"""
#time類就沒有傳回目前時間的屬性或方法了?
時間: 22:23:23.000111
執行個體對象的hour屬性: 22
執行個體對象的minute屬性: 23
執行個體對象的second屬性: 23
執行個體對象的microsecond屬性: 111
執行個體對象的tzinfo屬性: None
"""
例6_1:
from datetime import time
Time = time(22, 23, 3, 111) #執行個體化一個time對象:Time
print("時間:",Time)
#strftime()方法:根據傳入的格式來輸出時間字元串
print("指定格式:",Time.strftime("%H-%M-%S.%f"))
print("指定格式:",Time.strftime("%H{0}%M{1}%S{2}").format("時","分","秒")) #可以不格式化毫秒
#isoformat():輸出固定格式的字元串
print("固定格式:",Time.isoformat())
#replace():生成新的time對象
print("生成新的time對象:",Time.replace(hour=3))
print("生成新的time對象:",Time.replace(3,3,3,33))
"""
時間: 22:23:03.000111
指定格式: 22-23-03.000111
指定格式: 22時23分03秒
固定格式: 22:23:03.000111
生成新的time對象: 03:23:03.000111
生成新的time對象: 03:03:03.000033
"""
datetime.datetime類
1、datetime子產品下的datetime類是Python處理日期和時間的标準庫。datetime類是date類與time類的結合體,包括date類與time類的所有資訊
構造函數
datetime.datetime類的構造函數如下:
datetime.datetime (year, month, day, hour, minute, second, microsecond, tzinfo)
例7:執行個體化一個datetime對象
from datetime import datetime
now = datetime(2020,8,27,12,12,12,1111)#執行個體化一個datetime對象
print("目前日期為:",now)
print(type(now))
now1 = datetime(year=2020,month=8,day=27) #年月日為必填參數,其餘未傳入時預設為0
print("目前日期為:",now1)
"""
目前日期為: 2020-08-27 12:12:12.001111
<class 'datetime.datetime'>
目前日期為: 2020-08-27 00:00:00
"""
datetime.datetime類的靜态屬性
1、以下是datetime.datetime類的一些(類)靜态方法和屬性:直接通過類名調用
類屬性、類方法 | 描述 |
datetime.today() | 傳回一個表示目前本地時間的datetime對象 |
datetime.now([tz]) | 傳回一個表示目前本地時間的datetime對象,如果提供了參數tz,則擷取tz參數所指時區的本地時間 |
datetime.utcnow() | 傳回一個目前utc時間的datetime對象;#格林威治時間 |
datetime.fromtimestamp(timestamp[, tz]) | 根據時間戮建立一個datetime對象,參數tz指定時區資訊 |
datetime.utcfromtimestamp(timestamp) | 根據時間戮建立一個datetime對象(utc) |
datetime.combine(date, time) | 根據date和time,建立一個datetime對象 |
datetime.strptime(date_string, format) | 将格式字元串轉換為datetime對象 |
datetime.datetime類方法
1、直接通過類名調用
today()
1、today()方法的文法如下:datetime.datetime.today()
2、此文法中datetime.datetime指的是datetime子產品中的datetime類
3、傳回值:傳回一個表示目前本地時間的datetime對象
例8:
import datetime
now = datetime.datetime.today()
print("目前時間為:",now)
print(type(now))
"""
目前時間為: 2020-08-27 14:12:01.679698
<class 'datetime.datetime'>
"""
例8_1:
from datetime import datetime
now = datetime.today()
print("目前時間為:",now)
#目前時間為: 2020-08-27 14:11:06.903158
now()
1、now()方法的文法如下:datetime.datetime.now([tz])
2、此文法中datetime.datetime指的是datetime子產品中的datetime類
3、如果提供參數tz,就擷取tz參數所指時區的本地時間(now是本地時間,可以認為是你電腦現在的時間)
4、傳回值:傳回目前指定的本地時間,一個datetime對象
例9:
from datetime import datetime
print("目前時間為:",datetime.now())
#目前時間為: 2018-08-19 19:07:33.719778
utcnow()
1、utcnow()方法的文法如下:datetime.datetime.utcnow()
2、此文法中datetime.datetime指的是datetime子產品中的datetime類
3、傳回值:傳回一個目前utc時間的datetime對象
例10:
from datetime import datetime
print("目前時間為:",datetime.utcnow())
print("目前時間為:",datetime.now())
"""
目前時間為: 2020-08-27 06:15:31.312575
目前時間為: 2020-08-27 14:15:31.312575
"""
fromtimestamp()
1、fromtimestamp()方法的文法如下:datetime.datetime.fromtimestamp(timestamp[,tz]
2、此文法中datetime.datetime指的是datetime子產品中的datetime類
3、參數tz表示指定的時區資訊,參數timestamp表示需要轉換的時間戳
4、傳回值:将一個時間戳形式的時間轉換為可讀形式,傳回一個datetime對象
例11:
from datetime import datetime
import time
now = time.time()
print("目前時間戳:",now)
Time = datetime.fromtimestamp(now)
print("目前時間為:",Time)
print("目前時間為:",datetime.fromtimestamp(1583355285))
"""
目前時間戳: 1598509379.9748611
目前時間為: 2020-08-27 14:22:59.974861
目前時間為: 2020-03-05 04:54:45
"""
combine()
1、combine()方法的文法如下:datetime.datetime.combine(date, time)
2、此文法中datetime.datetime指的是datetime子產品中的datetime類
3、參數date表示一個date對象,參數time表示一個time對象
4、傳回值:根據date和time,建立一個datetime對象
例12:
import datetime
Date = datetime.date.today()
print("目前日期為:",Date)
Time = datetime.time(12,12,12,122)
print("目前時間為:",Time)
now = datetime.datetime.combine(Date,Time)
print("目前日期時間為:",now)
"""
目前日期為: 2020-08-27
目前時間為: 12:12:12.000122
目前日期時間為: 2020-08-27 12:12:12.000122
"""
strptime()
1、作用:将時間型字元串格式化為datetime對象
2、strptime()方法的文法如下:datetime.datetime.strptime(date_string,format)
3、此文法中datetime.datetime指的是datetime子產品中的datetime類
4、參數date_string指日期字元串,format為格式方式
5、傳回值:傳回一個datetime對象
例13:
from datetime import datetime
"""
1、strptime()方法将一個字元串時間格式化為一個datetime對象
2、目标格式中傳入了.%f屬性時,傳入的時間字元串中必須含有毫秒(必須為對應關系)
3、目标格式中未傳入了.%f屬性時,傳入的時間字元串中不能含有毫秒(必須為對應關系)
"""
time1 = datetime.strptime("2018-08-19 19:23:57.1111", "%Y-%m-%d %H:%M:%S.%f")
print(time1)
print(type(time1))
time2 = datetime.strptime("2018-08-19 19:23:57", '%Y-%m-%d %H:%M:%S')
print(time2)
"""
2018-08-19 19:23:57.111100
<class 'datetime.datetime'>
2018-08-19 19:23:57
"""
例13_1:
import datetime
input_date = str(input("-----:"))
try:
date = datetime.datetime.strptime(input_date, '%Y-%m-%d %H:%M:%S')
print("目前輸入的時間值為:", date)
except:
print("傳入的時間值錯誤")
print("時間值校驗完成")
"""
-----:2020-11-15 13:22:23
目前輸入的時間值為: 2020-11-15 13:22:23
時間值校驗完成
-----:2020-11-15 13:22:23.000
傳入的時間值錯誤
時間值校驗完成
-----:2020/11/15 13:22:23
傳入的時間值錯誤
時間值校驗完成
"""
datetime類對象的方法和屬性
1、執行個體化一個類對象(datetime類)或傳回一個datetime類對象後,通過其執行個體名來調用
2、以下方法和屬性需要通過:datetime.datetime類的執行個體對象調用
3、datetime.datetime類的類方法或屬性傳回的如果是一個datetime對象,那這個datetime對象又有自己的方法或屬性
⑴一般而言,在Python中傳回值是一個對象,那麼這個對象都有自己的方法或屬性
對象方法 | 描述(dt表示datetime類的執行個體對象) |
dt.year, dt.month, dt.day | 年、月、日 |
dt.hour, dt.minute, dt.second | 時、分、秒 |
dt.microsecond, dt.tzinfo | 微秒、時區資訊 |
dt.date() | 擷取datetime對象對應的date對象 |
dt.time() | 擷取datetime對象對應的time對象, tzinfo 為None |
dt.timetuple() | 傳回datetime對象對應的tuple(不包括tzinfo) |
dt.timetz() | 擷取datetime對象對應的time對象,tzinfo與datetime對象的tzinfo相同 |
dt.utctimetuple() | 傳回datetime對象對應的utc時間的tuple(不包括tzinfo) |
dt.toordinal() | 同date對象 |
dt.weekday() | 同date對象 |
dt.isocalendar() | 同date對象 |
dt.isoformat([sep]) | 傳回一個‘%Y-%m-%d |
dt.ctime() | 等價于time子產品的time.ctime(time.mktime(d.timetuple())) |
dt.strftime(format) | 傳回指定格式的時間字元串 |
dt.replace(year, month, day, hour,minute,second, microsecond, tzinfo) | 生成并傳回一個新的datetime對象 |
strftime()
1、作用:将datetime對象格式化為字元串
2、strftime()方法的文法如下:dt.strftime(format)
3、此文法中datetime.datetime指的是datetime子產品中的datetime類
4、dt表示datetime類的執行個體對象,參數format為格式化方式
3、傳回值:傳回一個時間字元串
例14:
from datetime import datetime
"""
1、strftime方法将一個datetime對象格式化為一個字元串時間
2、目标格式中傳入了.%f屬性時,輸出的時間值中将會有毫秒
3、目标格式中未傳入了.%f屬性時,輸出的時間值中将不會有毫秒
"""
now = datetime.now()
print("目前時間",now)
print(type(now))
time1 = now.strftime("%Y-%m-%d %H:%M:%S.%f")
print(time1)
time2 = now.strftime('%Y-%m-%d %H:%M:%S')
print(time2)
print(type(time1))
"""
目前時間 2020-08-27 14:48:01.711876
<class 'datetime.datetime'>
2020-08-27 14:48:01.711876
2020-08-27 14:48:01
<class 'str'>
"""
例15:
import datetime,time
today = datetime.datetime.now()
print(today.year)
print(today.hour)
print(today.date())
print(today.time())
'''
上面函數的輸出結果為:
2018
17
2018-08-25
17:01:33.202716
'''
datetime.timedelta類
1、timedelta對象表示兩個不同時間之間的內插補點
⑴datetime.timedelta對象代表兩個時間之間的時間差,兩個date、time或datetime對象相減就可以傳回一個timedelta對象
2、如果使用time子產品對時間進行算術運作,隻能将字元串格式的時間和struct_time格式的時間對象先轉換為時間戳格式
⑴然後對該時間戳加上或減去n秒,最後再轉換回struct_time格式或字元串格式,這顯然很不友善
3、而datetime子產品提供的timedelta類可以讓我們很方面的對datetime.date, datetime.time和datetime.datetime對象做算術運算
⑴且兩個時間之間的內插補點機關也更加容易控制。這個內插補點的機關可以是:天、秒、微秒、毫秒、分鐘、小時、周
構造函數
datetime.timedelta類的構造函數如下:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
#天、秒、微秒、毫秒、分鐘、小時、周
注:
1、所有參數都是預設參數,預設值為0
2、參數的值可以是整數或浮點數,也可以是正數或負數(正數表示加,負數表示減)
3、針對時間存儲,timedelta内部隻能存儲days,seconds,microseconds,其他參數的值會自動按如下規則進行轉換:
⑴millisecond毫秒)轉換成1000 microseconds(微秒)
⑵minute轉換成60 seconds
⑶hour轉換成3600 seconds
⑷week轉換成7 days
例16:
from datetime import timedelta
# 執行個體化一個時間段值:1周2天3小時4分鐘5秒777毫秒666微秒
time1 = timedelta(days=2, seconds=5, microseconds=666, milliseconds=777, minutes=4, hours=3, weeks=1)
print(time1)
print(type(time1))
time2 = timedelta(days=2, hours=1)
print(time2)
"""
9 days, 3:04:05.777666
<class 'datetime.timedelta'>
2 days, 1:00:00
感覺其作用就是執行個體化一個時間段值,然後可能根據這個時間段值來進行時間的加減
"""
例16_1:日期時間差
import datetime
Date = datetime.datetime.today()
print("目前日期:",Date)
Date1 = datetime.datetime(2020,8,20,12,12,12)
print("過去日期為:",Date1)
d = Date - Date1 #這裡以datetime對象為例,date對象與time對象也是可以相減的
print("日期差為:",d)
print(type(d))
"""
目前日期: 2020-08-27 15:01:28.856253
過去日期為: 2020-08-20 12:12:12
日期差為: 7 days, 2:49:16.856253
<class 'datetime.timedelta'>
"""
例16_1:時間間隔
import datetime
#print(datetime.timedelta(365).total_seconds()) #一年中共有多少秒
today = datetime.datetime.now()
print("目前時間:",today)
three_day_later = today + datetime.timedelta(3) #3天後
print(three_day_later)
print(type(three_day_later)) #還是一個datetime對象
three_day_befor = today - datetime.timedelta(days = 3) #3天前
#three_day_befor = today + datetime.timedelta(-3)
print(three_day_befor)
three_hours_later = today + datetime.timedelta(hours=3) #3小時後
print(three_hours_later)
new_day = today + datetime.timedelta(days=1,minutes=22,seconds=30,milliseconds=2) #1天22分鐘30秒2毫秒後
print(new_day)
"""
目前時間: 2020-08-27 15:07:15.893238
2020-08-30 15:07:15.893238
<class 'datetime.datetime'>
2020-08-24 15:07:15.893238
2020-08-27 18:07:15.893238
2020-08-28 15:29:45.895238
"""
datetime.timedelta類的類屬性
1、以下是datetime.timedelta類的一些(類)屬性:直接通過類名調用
類屬性名稱 | 描述 |
timedelta.min | timedelta(-999999999) |
timedelta.max | timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) |
timedelta.resolution | timedelta(microseconds=1) |
datetime.timedelta類對象的方法和屬性
1、執行個體化一個類對象後(timedelta類)或傳回一個timedelta類對象後,通過其執行個體名來調用
2、以下方法和屬性需要通過:datetime.timedelta類的執行個體對象調用
執行個體方法/屬性名稱 | 描述(td表示timedelta類的執行個體對象) |
td.days | 天 [-999999999, 999999999]:傳回時間差的天部分 |
td.seconds | 秒 [0, 86399]:傳回之間差的時分秒部分(轉換為秒傳回) |
td.microseconds | 微秒 [0, 999999] |
td.total_seconds() | 時間差中包含的總秒數 |
datetime.datetime.now() | 傳回目前本地時間(datetime.datetime對象執行個體) |
datetime.datetime.fromtimestamp(timestamp) | 傳回指定時間戳對應的時間(datetime.datetime對象執行個體) |
datetime.timedelta() | 傳回一個時間間隔對象,可以直接與datetime.datetime對象做加減操作 |
例17:
from datetime import datetime, timedelta
future = datetime.strptime("2020-02-01 08:00:00", "%Y-%m-%d %H:%M:%S")
now = datetime.now()
TimeEquation = now - future
print(TimeEquation) #傳回兩個時間差的天、時分秒部分:49 days, 5:58:56.887765
print(TimeEquation.days) #隻傳回兩個時間差的天數部分:49
print(TimeEquation.seconds) #隻傳回兩個時間差的時分秒部分(換算為秒傳回):21536=(5*60*60)+(58*60)+56
print(TimeEquation.seconds/60/60)#隻傳回兩個時間差的時分秒部分(換算為小時傳回):5.982222222222222=5+(59/60)
print(TimeEquation.total_seconds())
#傳回兩個時間差的總秒數(将相差天、時、分、秒都轉為秒):4255136.887765=(48*24*60*60)+(5*60*60)+(58*60)+56
"""
49 days, 5:58:56.887765
49
21536
5.982222222222222
4255136.887765
"""
補充
計算兩個時間的時間差
其本上常用的類有:datetime和timedelta兩個。它們之間可以互相加減。每個類都有一些方法和屬性可以檢視具體的值
⑴datetime可以檢視:天數(day),小時數(hour),星期幾(weekday())等
⑵timedelta可以檢視:天數(days),秒數(seconds)等
例18:
from datetime import datetime,timedelta
future = datetime.strptime("2019-02-01 08:00:00","%Y-%m-%d %H:%M:%S")
now = datetime.now()
TimeEquation = future - now #計算時間差
#print(TimeEquation) #145 days, 20:50:32.599774
hours = TimeEquation.seconds/60/60
minutes = (TimeEquation.seconds - hours*60*60)/60
seconds = TimeEquation.seconds - hours*60*60 - minutes * 60
print("今天是:",now.strftime("%Y-%m-%d %H:%M:%S"))
print("距離2019-02-01,還剩下%d天" % TimeEquation.days)
print(TimeEquation.days,hours ,minutes,seconds)
"""
今天是: 2018-09-08 11:42:38
距離2019-02-01,還剩下145天
145 20.289166666666667 0.0 0.0
"""
Python中的時區轉換
1、在Python中将一個時區的時間轉換成另一個時區的時間,比較常用的方法是:結合使用datetime子產品和pytz子產品,一般步驟為
⑴使用datetime子產品來擷取一個時間對象(datetime對象)
⑵使用pytz子產品來建立一個将要轉換到的時區對象
⑶使用datetime對象方法astimezone()方法來進行轉換
2、在介紹時區轉換前需要介紹兩個時間概念:
⑴navie時間:擷取的時間對象不知道自己的時間表示的是哪個時區的(如:使用datetime.now()方法擷取的時間對象就不知道目前表示的是哪個時區)
⑵aware時間:擷取的時間對象知道自己的時間表示的是哪個時區的
例19:
from datetime import datetime,timedelta,timezone
import pytz
now = datetime.now()
print(now)
utc_timezone = pytz.timezone("UTC")#使用pytz.timezone()方法來建立一個時區對象
utc_now = now.astimezone(utc_timezone)#使用astimezone()方法來将時間轉換為另一個時區的時間
print(utc_now)
"""
2020-03-31 12:53:43.762358
ValueError: astimezone() cannot be applied to a naive datetime
"""
注:
1、從上面例子的輸出可以看出,在進行時區轉換時(now.astimezone(utc_timezone)),報錯了,這是因為:
⑴在使用datetime.now()擷取的時間對象是一個navie時間,即不知道自己的時間表示的是哪個時區。既然不知道自己的時間目前在哪個時區,那肯定是不能将目前時間轉化為另一個時區的時間的
⑵要解決這個問題,是以需要将使用datetime.now()擷取的這個時間加上一個時區标志
⑶要給一個無時區标志的時間加上一個時區标志,那就可以用到datetime對象下的replace()方法了
2、pytz.timezone(‘時區名’):此方法能擷取一個tzinfo對象,該對象可在datetime生成時間中以參數的形式放入,即可生成對應時區的時間
3、astimezone():datetime對象方法,用于将一個時區的時間轉為另一個時區的時間。這個方法隻能别aware類型時間調用,不能被navie類型的時間調用
4、replace():datetime對象方法,可以将一個時間的某些屬性進行修改
5、是以正确的将一個時區的時間轉為另一個時區的時間,可以使用下面這種方法
例19_1:
from datetime import datetime,timedelta,timezone
import pytz
now = datetime.now()
print(now)
utc_timezone = pytz.timezone("UTC")
now = now.replace(tzinfo=pytz.timezone("Asia/Shanghai"))
print(now)
utc_now = now.astimezone(utc_timezone)
print(utc_now)
"""
2020-03-31 13:09:37.666740
2020-03-31 13:09:37.666740+08:06
2020-03-31 05:03:37.666740+00:00
"""
注:"+08:06"表示的是目前時區的時間相對于UTC時間相差了多少
月曆子產品
1、此子產品的函數都是月曆相關的,例如列印某月的字元月曆
2、星期一是預設的每周第一天,星期天是預設的最後一天。更改設定需調用calendar.setfirstweekday()函數
calendar()
1、文法:calendar.calendar(year,w=2,l=1,c=6)
2、作用:傳回一個多行字元串格式的year年年曆,3個月一行,間隔距離為c。 每日寬度間隔為w字元。每行長度為21* W+18+2* C。l是每星期行數
例20:
import calendar
print(calendar.calendar(1993))
"""
上面代碼的輸出結果為:
1993
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 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 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 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
下面的月份就不寫了
"""
month()
1、文法:calendar.month(year,month,w=2,l=1)
2、傳回一個多行字元串格式的year年month月月曆,兩行标題,一周一行。每日寬度間隔為w字元。每行的長度為7* w+6。l是每星期的行數
例21:
import calendar
print(calendar.month(1993,7))
"""
上面代碼的輸出結果為:
July 1993
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
"""
isleap()
1、文法:calendar.isleap(year)
2、傳回值:是閏年傳回True,否則為false
例22:
import calendar
month = calendar.isleap(1993)
if month == False:
print("1993年不是閏年")
#上面代碼的輸出結果為:1993年不是閏年
leapdays()
1、文法:calendar.leapdays(y1,y2)
2、傳回值:傳回在Y1,Y2兩年之間的閏年總數
例23:
import calendar
print(calendar.leapdays(2008,2018))
#上面代碼的輸出結果為:3
注:calendar子產品中還有其他的一些函數,由于這個子產品用的不是很多,多以就不一一列舉了
拓展
UTC time
Coordinated Universal Time,世界協調時,又稱 格林尼治天文時間、世界标準時間。與UTC time對應的是各個時區的local time
⑴東N區的時間比UTC時間早N個小時,是以UTC time + N小時即為東N區的本地時間
⑵西N區時間比UTC時間晚N個小時,即 UTC time - N小時 即為西N區的本地時間
⑶中國在東8區,是以比UTC時間早8小時,可以以UTC+8進行表示
按天生成日志
例24:
import os
import datetime,time
def make_dir():
get_file_path = os.path.realpath(__file__)
get_file_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(get_file_path))))
make_file_path = os.path.join(get_file_dir+"{}".format(str(datetime.datetime.now().year)
+ "_" + str(datetime.datetime.now().month) + "_" + str(datetime.datetime.now().day)))
make_file_name = make_file_path + "_log.txt"
print(make_file_name)
return make_file_name
def open_file(log_file_path):
log_file = open(log_file_path,"w")
return log_file
if __name__ == "__main__":
make_file_name = make_dir()
open_file(make_file_name)
"""
F:\2019_6_26_log.txt
"""