99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋(píng)果6袋
6
麥子學(xué)院

Python的datetime模塊如何使用?

發(fā)布時(shí)間:2016-12-20 21:06  回復(fù):0  查看:2929   最后回復(fù):2016-12-20 21:06  

Python開(kāi)發(fā)中,datetime模塊提供了操作日期和時(shí)間功能該模塊提供了五種核心對(duì)象:datetime(時(shí)間日期類型), date(日期類型), time(時(shí)間類型), tzinfo(時(shí)區(qū)類型), timedelta(時(shí)間差類型)。分別如下:


一、datetime 對(duì)象


datetime對(duì)象可以用來(lái)表示精確的日期和時(shí)間,其實(shí)例化方法如下


>>> from datetime import datetime

>>> birthday = datetime(year=1993, month=10, day=20)

>>> birthday

datetime.datetime(1993, 10, 20, 0, 0)

>>> birthday.month

10

>>> now = datetime.now() # 返回當(dāng)前時(shí)間

>>> now

datetime.datetime(2016, 12, 17, 20, 3, 25, 898000)

在實(shí)例化datetime對(duì)象時(shí),year, month, day是必填項(xiàng),hour, minute, second, microsecond(微秒), tzinfo(時(shí)區(qū))是可選項(xiàng)。


二、date 對(duì)象


date對(duì)象和datetime對(duì)象的區(qū)別在于,date對(duì)象只能表示日期,不能表示時(shí)間(即其精確度為天)。date實(shí)例化時(shí)須要且僅須要三個(gè)參數(shù):year, month, day。date對(duì)象是沒(méi)有時(shí)區(qū)(tzinfo)屬性的。


>>> from datetime import date

>>> birthday = date(year=2016, month=12, day=17)

>>> birthday

datime.date(2016, 12, 17)

>>> birthday.year

2016

三、time對(duì)象


date對(duì)象相反,time對(duì)象只能用來(lái)表示時(shí)間,而不能用來(lái)表示日期。time對(duì)象所表示的時(shí)間可以精確到微秒,而且可以具有時(shí)區(qū)(tzinfo)屬性。


>>> from datetime import time

>>> now_time = time(hours=20, minute=30, second=10) # hours, minute, secondmicrosecond, tzinfo都是可選參數(shù)

>>> now_time

datetime.time(20, 30, 10)

>>> now_time.hours

20

這里要注意,python中還有另外一個(gè)模塊我們經(jīng)常用到的模塊:time,這個(gè)模塊也含有用來(lái)表示時(shí)間、日期對(duì)象的函數(shù),但因?yàn)樵撃K下的函數(shù)都是對(duì)同名C函數(shù)的直接調(diào)用,所以返回的對(duì)象都不太pythonic,所以我們一般不用,經(jīng)常使用的就兩個(gè)函數(shù):time.sleep(), time.time()


>>> import time

>>> time.time() #返回當(dāng)前時(shí)間戳

1481979297.533

>>> time.sleep(5)  # 程序進(jìn)入睡眠5s

四、timedelta對(duì)象


timedelta對(duì)象表示一個(gè)時(shí)間段,timedelta對(duì)象可以通過(guò)手動(dòng)實(shí)例化得到,也可以通過(guò)上述三個(gè)對(duì)象(datetime, date, time)相減得到。


>>> from datetime import datetime, timedleta

>>> now = datetime.now()

>>> last = datetime(year=2016, month=3, day=10, hour=8)

>>> delta = now - last

>>> delta

datetime.timedelta(282, 47010, 328000)

>>> last + delta == now

True

手動(dòng)實(shí)例化timedelta時(shí),可以傳入的參數(shù)有:days, seconds, microseconds, milliseconds, minutes, hours, weeks。


五、tzinfo對(duì)象


講解tzinfo(時(shí)區(qū))對(duì)象前,先了解兩個(gè)概念:


UTC時(shí)間 協(xié)調(diào)世界時(shí)。和GMT(格林尼治平均時(shí)間)是一個(gè)東西,只不過(guò)UTC是通過(guò)原子鐘測(cè)量出來(lái),GMT是通過(guò)天文觀測(cè)出來(lái)的,所以UTCGMT精度更高,因此現(xiàn)在世界上不同時(shí)區(qū)的時(shí)間都是以UTC時(shí)間為基準(zhǔn),如:北京時(shí)間=UTC時(shí)間+8小時(shí)

DST :夏時(shí)令(daylight saving time),因?yàn)橄奶焯炝恋脑纾杂械膰?guó)家就在一年的某些時(shí)段把時(shí)間人為的調(diào)快一小時(shí),使人們?cè)缢瑴p少照明亮,充分利用光照資源,從而節(jié)約能源。我國(guó)也實(shí)行過(guò),不過(guò)后來(lái)廢止了。

tzinfo對(duì)象是用來(lái)表示該時(shí)區(qū)相對(duì)UTC時(shí)間差值,和該地區(qū)是否執(zhí)行夏時(shí)令的對(duì)象。datetime模塊所提供的的tzinfo對(duì)象是一個(gè)抽象基類,也就是說(shuō)我們不應(yīng)該直接實(shí)例化此對(duì)象, 而應(yīng)該以此類為基類,定義出子類,然后再實(shí)例化以供使用。在子類化的時(shí)候,需要自定義很多方法,非常繁瑣。還好python提供了一個(gè) pytz 的庫(kù),里面自帶了適合各個(gè)國(guó)家和時(shí)區(qū)的tzinfo對(duì)象,我們可以直接使用。


python中,我們把tzinfo為空的datetime對(duì)象稱為是aware(覺(jué)醒)的,把tzinfo不為空的datetime對(duì)象稱為naive(幼稚)的。使用datetime模塊時(shí),除非手動(dòng)指定tzinfo屬性,否則,創(chuàng)建出來(lái)的datatime對(duì)象tzinfo屬性都默認(rèn)為空。


aware 對(duì)象具有關(guān)于應(yīng)用規(guī)則和時(shí)間調(diào)整的充分的信息,例如時(shí)區(qū)和夏令時(shí)信息,來(lái)定位相對(duì)其他aware 對(duì)象的位置。aware對(duì)象用于表示時(shí)間的一個(gè)特定的時(shí)刻,它是明確無(wú)二的。


naive 對(duì)象沒(méi)有充分的信息來(lái)明確地相對(duì)其他日期/時(shí)間定位它自己。一個(gè) naive 對(duì)象表示的是世界協(xié)調(diào)時(shí)(UTC)、本地時(shí)間還是其它時(shí)區(qū)的時(shí)間完全取決于程序,就像一個(gè)特定的數(shù)字表示的是米、英里還是質(zhì)量一樣。


>>> from datetime import datetime

>>> import pytz

>>> utc_tz = pytz.timezone('UTC')

>>> china_tz = pytz.timezone('China/Shanghai')

>>> local_naive = datetime.now()

>>> local_naive

datetime.datetime(2016, 12, 18, 8, 8, 14000)

>>> local_aware = localmoment_aware.replace(china_tz)

datetime.datetime(2016, 12, 18, 8, 8, 14000, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8>

>>> utc_aware = local_aware.astimezone(utc_tz)

>>> utc_aware

datetime.datetime(2016, 12, 18, 0, 8, 14000, tzinfo=<UTC>

>>> utc_aware - local_aware  #雖然時(shí)區(qū)不同但是表示的同一個(gè)時(shí)間點(diǎn)

datetime.timedelta(0)


注意,aware類型的datetime對(duì)象,只能和aware類型的datetime對(duì)象進(jìn)行運(yùn)算(相減,大小比較等)。navie類型的datetime對(duì)象,只能和naive類型的datetime對(duì)象進(jìn)行運(yùn)算(相減,大小比較等)。aware類型和naive類型之間運(yùn)算會(huì)報(bào)錯(cuò):


>>> local_naive - local_aware

TypeError:can't subtract offset-naive and offset-aware datetime


來(lái)源:簡(jiǎn)書(shū)

您還未登錄,請(qǐng)先登錄

熱門(mén)帖子

最新帖子

?