隨心所欲地用Python處理時間(1&2&3)
datetime模塊提供了用于處理日期和時間的類和對應(yīng)的方法,一般用于處理年、月、日、時、分、秒的統(tǒng)計(jì)和計(jì)算等需求。在支持日期時間數(shù)學(xué)運(yùn)算的同時,實(shí)現(xiàn)的關(guān)注點(diǎn)更著重于如何能夠更有效地解析其屬性用于格式化輸出和數(shù)據(jù)操作。
學(xué)習(xí)該模塊,首先要有一個概念:日期和時間,要不然會混亂,這里進(jìn)行狹義的理解即可:日期是日期,時間是時間,日常生活中有時候并沒有很好的去區(qū)分。
import?time?time.time()?1625483470.3409266
二、datetime.date類
1、date類介紹
import?datetimet?=?datetime.date(2019,8,26)print(type(t))print(t.day,t.month,t.year)?#?26?8?2019
from?datetime?import?dateprint(dir(date))['ctime',?'day',?'fromisocalendar',?'fromisoformat',?'fromordinal',?'fromtimestamp',?'isocalendar',?'isoformat',?'isoweekday',?'max',?'min',?'month',?'replace',?'resolution',?'strftime',?'timetuple',?'today',?'toordinal',?'weekday',?'year']
2、類方法
date.today()
from?datetime?import?date?date.today()datetime.date(2021,?7,?4)
date.fromtimestamp()
from?datetime?import?datedate.fromtimestamp(1339119900000/1e3).strftime('%Y-%m-%d?%H:%M')'2012-06-07?00:00'date.fromtimestamp(1339120800000/1e3).strftime('%Y-%m-%d?%H:%M')'2012-06-07?00:00'
date.fromordinal()
from?datetime?import?dated?=?date.fromordinal(730920)?#?730920th?day?after?1.?1.?0001ddatetime.date(2002,?3,?11)
date.fromisoformat()
from?datetime?import?datedate.fromisoformat('2019-12-04')datetime.date(2019,?12,?4)
d.isoformat()'2002-03-11'
date.fromisocalendar()
date.fromisocalendar(2021,?42,?3)datetime.date(2021,?10,?20)
date.min
from?datetime?import?datedate.mindatetime.date(1,?1,?1)
date.max
from datetime import datedate.maxdatetime.date(9999, 12, 31)
date.resolution
from datetime import datedate.resolutiondatetime.timedelta(days=1)
date.year
from datetime import dated = date.today()#生成一個date對象ddatetime.date(2021, 7, 5)d.year2021
date.month
#接上述案例d.month7
date.day
#接上述案例d.day5
3、實(shí)例方法
date.replace()
from?datetime?import?dated = date(2002, 12, 31)d.replace(day=26)datetime.date(2002, 12, 26)
date.timetuple()
d?=?date(2002,?12,?31)date.timetuple(d)time.struct_time(tm_year=2002, tm_mon=12, tm_mday=31,tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=365,tm_isdst=-1)
date.toordinal()
d = date(1, 1, 1)d.toordinal()1d = date(2002, 12, 31)d.toordinal()731215date.fromordinal(d.toordinal())datetime.date(2002, 12, 31)
date.weekday()
date(2002,?12,?4).weekday()2
date.isoweekday()
date(2002,?12,?4).isoweekday()3
date.isocalendar()
from datetime import datedate(2003, 12, 29).isocalendar()(2004, 1, 1) # 舊版本datetime.IsoCalendarDate(year=2004,?week=1,?weekday=1)?#?新版本date(2004, 1, 4).isocalendar()datetime.IsoCalendarDate(year=2004,?week=1,?weekday=7)
date.isoformat()
from?datetime?import?datedate(2021,?10,?1).isoformat()'2021-10-01'
date.__str__()
from datetime import datedate(2021, 10, 1).__str__()'2021-10-01'str(date(2021, 10, 1))'2021-10-01'
date.ctime()
from datetime import datedate(2021,?10,?1).ctime()'Fri?Oct??1?00:00:00?2021'
d=date(2021, 10, 1)import timetime.ctime(time.mktime(d.timetuple()))'Fri?Oct??1?00:00:00?2021'
date.strftime()
import?datetimedt=datetime.date(2021, 10, 1)#創(chuàng)建一個日期對象dt.strftime("%Y-%m-%d")'2021-10-01'dt.strftime("%Y年%m月%d日")'2021年10月01日'dt.strftime("%Y//%m//%d")'2021//10//01'dt.strftime("%Y-%m-%d %H:%M")'2021-10-01 00:00'dt.strftime("%A, %d. %B %Y %I:%M%p")'Friday, 01. October 2021 12:00AM'
date.__format__(format)
import datetimedt=datetime.date(2021, 10, 1)#創(chuàng)建一個日期對象dt.__format__("%Y年%m月%d日")'2021年10月01日'4、支持的運(yùn)算
?
三、datetime.time類
1、time類概述
作用:一個?time?對象代表某日的(本地)時間,它獨(dú)立于任何特定日期,并可通過?tzinfo?對象來調(diào)整。
語 法:
datetime.time(hour=0, minute=0, second=0, microsecond=0,
tzinfo=None, *, fold=0)
參 數(shù):
所有參數(shù)都是可選的,tzinfo?可以是?None,或者是一個?tzinfo?子類的實(shí)例。 其余的參數(shù)必須是在下面范圍內(nèi)的整數(shù):
0?<=?hour?24
0?<=?minute?60
0?<=?second?60
0?<=?microsecond?1000000
fold?in?[0,?1]
如果給出一個此范圍以外的參數(shù),則會引發(fā)?ValueError。 所有參數(shù)值默認(rèn)為?0,只有?tzinfo?默認(rèn)為?None。
?
通過內(nèi)置函數(shù)dir,可以查看time類的所有方法和屬性
from datetime import timeprint(dir(time))['dst', 'fold', 'fromisoformat', 'hour', 'isoformat', 'max','microsecond', 'min', 'minute', 'replace', 'resolution','second', 'strftime', 'tzinfo', 'tzname', 'utcoffset']
?
2、time類屬性
time.min
早最的可表示?time,?time(0,?0,?0,?0)。
from datetime import timetime.mindatetime.time(0, 0)
time.max
最晚的可表示?time,?time(23,?59,?59,?999999)。
from datetime import timetime.maxdatetime.time(23, 59, 59, 999999)
time.resolution
兩個不相等的?time?對象之間可能的最小間隔,timedelta(microseconds=1),但是請注意?time?對象并不支持算術(shù)運(yùn)算。
from datetime import timetime.resolutiondatetime.timedelta(microseconds=1)
3、time類實(shí)例屬性
time.hour
取值范圍是?range(24)。
from datetime import timet = time(hour=12, minute=34, second=56, microsecond=123456)t.hour12
time.minute
取值范圍是?range(60)。
t.minute34
time.second
取值范圍是?range(60)。
t.second56
time.microsecond
取值范圍是?range(1000000)。
t.microsecond123456
time.tzinfo
作為 tzinfo 參數(shù)被傳給?time?構(gòu)造器的對象,如果沒有傳入值則為?None。
t.tzinfotime.fold
取值范圍是?[0,?1]。 用于在重復(fù)的時間段中消除邊界時間歧義。 (當(dāng)夏令時結(jié)束時回?fù)軙r鐘或由于政治原因?qū)е庐?dāng)明時區(qū)的 UTC 時差減少就會出現(xiàn)重復(fù)的時間段。) 取值 0 (1) 表示兩個時刻早于(晚于)所代表的同一邊界時間。
t.fold0
4、time類實(shí)例方法
time.replace()
作用:返回一個具有同樣屬性值的?time,除非通過任何關(guān)鍵字參數(shù)指定了某些屬性值。
語法:time.replace(hour=self.hour,?minute=self.minute,?second=self.second,?
microsecond=self.microsecond,?tzinfo=self.tzinfo,?*,?fold=0)
from datetime import timet = time(hour=12, minute=34, second=56, microsecond=123456)t.replace(hour=23, minute=12,)datetime.time(23, 12, 56, 123456)
time.isoformat()
作用:返回表示為 ISO 8601 格式之一的時間字符串
語法:time.isoformat(timespec='auto')
from datetime import timet = time(hour=12, minute=34, second=56, microsecond=123456)t.isoformat()'12:34:56.123456't.isoformat(timespec='minutes')'12:34'dt = time(hour=12, minute=34, second=56, microsecond=0)dt.isoformat(timespec='microseconds')'12:34:56.000000'dt.isoformat(timespec='auto')'12:34:56'
time.fromisoformat()
作用:返回對應(yīng)于?time.isoformat()?所提供的某種?time_string?格式的?time。 特別地,此函數(shù)支持以下格式的字符串:HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
語法:time.fromisoformat(time_string)
time.fromisoformat('04:23:01')datetime.time(4, 23, 1)time.fromisoformat('04:23:01.000384')datetime.time(4, 23, 1, 384)time.fromisoformat('04:23:01+04:00')datetime.time(4,23,1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
time.__str__()
作用:對于時間對象?t,?str(t)?等價于?t.isoformat()
語法:time.__str__(t)
from datetime import timet = time(hour=12, minute=34, second=56, microsecond=123456)time.__str__(t)'12:34:56.123456'str(t)'12:34:56.123456'
time.strftime()
作用:時間->字符串,返回一個由顯式格式字符串所指明的代表時間的字符串
語法:time.strftime(format)
from datetime import timet = time(hour=12, minute=3, second=56)t.strftime('%H:%M:%S')#用:分隔'12:03:56'#用%分隔t.strftime('%H%%%M%%%S')'12%03%56'
time.__format__()
作用:與?time.strftime()?相同
語法:time.__format__(format)
from datetime import timet = time(hour=12, minute=3, second=56)t.__format__('%H:%M:%S')'12:03:56't.__format__('%H%%%M%%%S')'12%03%56'
time.utcoffset()
作用:如果?tzinfo?為?None,則返回?None,否則返回?self.tzinfo.utcoffset(None),并且在后者不返回?None?或一個幅度小于一天的 a?timedelta?對象時將引發(fā)異常。
time.dst()
作用:如果?tzinfo?為?None,則返回?None,否則返回?self.tzinfo.dst(None),并且在后者不返回?None?或者一個幅度小于一天的?timedelta?對象時將引發(fā)異常。
time.tzname()
作用:如果?tzinfo?為?None,則返回?None,否則返回?self.tzinfo.tzname(None),如果后者不返回?None?或者一個字符串對象則將引發(fā)異常。
from datetime import time, tzinfo, timedeltaclass TZ1(tzinfo):def utcoffset(self, dt):return timedelta(hours=1)def dst(self, dt):return timedelta(0)def tzname(self,dt):return "+01:00"def __repr__(self):return f"{self.__class__.__name__}()"t = time(12, 10, 30, tzinfo=TZ1())tdatetime.time(12, 10, 30, tzinfo=TZ1())t.isoformat()'12:10:30+01:00't.dst()datetime.timedelta(0)t.tzname()'+01:00't.strftime("%H:%M:%S %Z")'12:10:30 +01:00''The {} is {:%H:%M}.'.format("time", t)'The?time?is?12:10.'
···? END? ···
