Python的Datetime模塊

Datetime模塊

​ Python官方的時間模塊主要有timedatetime模塊。time偏重於底層平臺,模塊中大多數函數會調用本地平臺的C鏈接庫,因此有些函數運行的結果,在不同的平臺上會有所不同。datetime模塊對time模塊進行了封裝,提供了高級API,因此本章重點介紹datetime模塊。

datetime包含以下幾個類:

  • datetime:包含時間和日期
  • date:只包含日期
  • time:只包含時間
  • timedelta:計算時間跨度
  • tzinfo:時區信息

datetime、date和time類

datetime類

構造方法:

datetime.datetime(year, month, day, hour = 0, minute = 0, second = 0, microsecond = 0, tzinfo = None)

其中的year、month和day三個參數是不能省略

PythonShell實例:

>>> import datetime
>>> dt = datetime.datetime(2018, 2, 29)
Traceback (most recent call last):
  File "<pyshell#146>", line 1, in <module>
    dt = datetime.datetime(2018, 2, 29)
ValueError: day is out of range for month
>>> dt = datetime.datetime(2018, 2, 28)
>>> dt
datetime.datetime(2018, 2, 28, 0, 0)
>>> print(dt)
2018-02-28 00:00:00
>>> type(dt)
<class 'datetime.datetime'>

dt = datetime.datetime(2018, 2, 29)這一行拋出ValueError,是因爲不存在2018年2月29號。
然後dt = datetime.datetime(2018, 2, 28)這一天存在,所以dt的類型是datetime.datetime,輸出用print語句可以輸出時間

一些datetime的類方法

  • today():返回當前本地日期和時間
  • now(tz=None):返回當前本地日期和時間,如果tz爲None或未指定,則等同於today()
  • utcnow():返回當前UTC1日期和時間
  • fromtimestamp(timestamp, tz=None):返回UNIX時間戳2對應本地日期和時間
  • utcfromtimestamp(timestamp):返回UNIX時間戳對應本地日期和時間對應的UTC日期和時間

Shell實例代碼

>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2020, 4, 15, 22, 3, 32, 599159)
>>> datetime.datetime.now()
datetime.datetime(2020, 4, 15, 22, 3, 55, 881638)
>>> datetime .datetime.utcnow()
datetime.datetime(2020, 4, 15, 14, 4, 10, 894521)
>>> datetime.datetime.fromtimestamp(9999999999.999)
datetime.datetime(2286, 11, 21, 1, 46, 39, 999001)
>>> datetime.datetime.utcfromtimestamp(999999999.999)
datetime.datetime(2001, 9, 9, 1, 46, 39, 999000)

Date類

一個date對象可以表示日期等信息,創建date對象可以使用如下構造方法。

datetime.date(year, month, day)

其中year、month和day三個參數是不能省略的
Shell實例:

>>> import datetime
>>> d = datetime.date(2018, 2, 29)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    d = datetime.date(2018, 2, 29)
ValueError: day is out of range for month
>>> d = datetime.date(2018, 2, 28)
>>> print(d)
2018-02-28
>>> d
datetime.date(2018, 2, 28)

異常是因爲沒有29號。
注意:print和使用交互直接顯示是不同的,直接交互是輸出了類型,你可以試試type(d),會顯示datetime.date類型,然後print直接輸出了2018-02-28。

類方法

  • date.today():返回本地日期(當前)
  • date.fromtimestamp(timestamp):範湖與UNIX時間戳2對應的本地日期
>>> import datetime
>>> datetime.date.today()
datetime.date(2020, 4, 20)
>>> print(datetime.date.today())
2020-04-20
>>> datetime.date.fromtimestamp(999999.999)
datetime.date(1970, 1, 12)
>>> print(datetime.date.fromtimestamp(99999999.999))
1973-03-03

time類

構造方法

datetime.time(hour = 0, minute = 0, second = 0, microsecond = 0, tzinfo - None)

實例:

>>> import datetime
>>> datetime.time(24, 59, 58, 1999)
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    datetime.time(24, 59, 58, 1999)
ValueError: hour must be in 0..23
>>> datetime.time(23, 59, 58, 1999)
datetime.time(23, 59, 58, 1999)

異常因爲一天不超過24小時

日期時間計算

如果想知道10天之後是那一天,或者想知道2018年1月1日前5周是那一天,就要用到timedelta類,用來計算對象時間間隔
構造方法:

datetime.timedelta(days = 0, seconds = 0, microseconds = 0, milliseconds = 0, minutes = 0, hours = 0, weeks = 0)

test:

>>> import datetime
>>> datetime.date.today()
datetime.date(2020, 4, 20)
>>> d = datetime.date.today()
>>> delta = datetime.timedelta(10)
>>> d += delta
>>> print(d)
2020-04-30
>>> d = datetime.date(2018, 1, 1)
>>> delta = datetime.timedelta(weeks = 5)
>>> d -= delta
>>> print(d)
2017-11-27

⛅️是不是發現​寫的不怎麼樣​了​?​確實是​,​我確實有點暈了,哈哈⛅️

解釋:
d是獲取日期,然後將d+delta就是增加,d-delta就是相減

後面的搞不明白了……😓


  1. UTC——協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。由於英文(CUT)和法文(TUC)的縮寫不同,作爲妥協,簡稱UTC。協調世界時是以原子時秒長爲基礎,在時刻上儘量接近於世界時的一種時間計量系統。中國大陸採用ISO 8601-1988的《數據元和交換格式信息交換日期和時間表示法》(GB/T 7408-1994)稱之爲國際協調時間,代替原來的GB/T 7408-1994;中國臺灣採用CNS 7648的《資料元及交換格式–資訊交換–日期及時間的表示法》,稱之爲世界統一時間。
    u.com/item/世界時/692237)的一種時間計量系統。中國大陸採用ISO 8601-1988的《數據元和交換格式信息交換日期和時間表示法》(GB/T 7408-1994)稱之爲國際協調時間,代替原來的GB/T 7408-1994;中國臺灣採用CNS 7648的《資料元及交換格式–資訊交換–日期及時間的表示法》,稱之爲世界統一時間。 ↩︎

  2. 時間戳是指格林威治時間1970年01月01日00時00分00秒起至現在的總毫秒數。通俗的講, 時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。 它的提出主要是爲用戶提供一份電子證據, 以證明用戶的某些數據的產生時間。 在實際應用上, 它可以使用在包括電子商務、 金融活動的各個方面, 尤其可以用來支撐公開密鑰基礎設施的 “不可否認” 服務。 ↩︎ ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章