Python_常用內建模塊:Day17

前言

養成一個好的習慣只需要堅持21天,Day17

datetime

Python中的datetime模塊可以獲取當前日期和時間。

from datetime import datetime
now = datetime.now() # 獲當前datetime
print(now)
print(type(now))
# 2020-02-29 11:26:45.209870
# <class 'datetime.datetime'>

datetime模塊還包含一個datetime類,datetime類有各種關於時間和日期的方法。
如果僅導入import datetime,則必須引用全名datetime.datetimedatetime.now()返回當前日期和時間,其類型是datetime
獲取指定日期和時間

from datetime import datetime
dt = datetime(2020,5,20,13,14)
print(dt)
# 2020-05-20 13:14:00
datetime轉換爲timestamp

什麼是timestamp呢?爲什麼要把datetime轉換爲timestamp呢?首先在計算機中,時間的表示並不是我們平常所看到的那樣,實際上是用數字表示的。我們把1970年1月1日 00:00:00 UTC+00:00時區的時刻稱爲epoch time,記爲0(1970年以前的時間timestamp爲負數),當前時間就是相對於epoch time的秒數,稱爲timestamp。即:

timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00

timestamp的值與時區毫無關係,timestamp一旦確定,其UTC時間就確定了,轉換到任意時區的時間也是完全確定的。如果我們要把一個datetime類型轉換爲timestamp只需要簡單調用timestamp()方法:

from datetime import datetime
dt = datetime(2020,5,20,13,14)
dt.timestamp()
# 1589951640.0
timestamp轉換爲datetime

要把timestamp轉換爲datetime,使用datetimefromtimestamp()方法:

from datetime import datetime
t = 1589951640.0
print(datetime.fromtimestamp(t))
# 2020-05-20 13:14:00
datetime轉換爲str

要把時間日期轉化爲str,使用strftime()實現:

from datetime import datetime
now = datetime.now()
print(now.strftime('%a,%b %d %H:%M'))
# Sat,Feb 29 18:46
datetime加減

對日期和時間的加減實際上是把datetime往後或者往前計算,使用timedelta這個類,得到新的datetime:

from datetime import datetime,timedelta
now = datetime.now()
now
# datetime.datetime(2020, 2, 29, 18, 56, 7, 426832)
now + timedelta(hours = 10)
# datetime.datetime(2020, 3, 1, 4, 56, 7, 426832)
now + timedelta(days = 1)
# datetime.datetime(2020, 3, 1, 18, 56, 7, 426832)
now + timedelta(days = 1,hours = 12)
# datetime.datetime(2020, 3, 2, 6, 56, 7, 426832)
本地時間轉換爲UTC時間

本地時間指的是系統設定時區的時間,例如北京時間是UTC+8:00時區的時間,而UTC時間指UTC+0:00時區的時間。
datetime類有一個時區屬性tzinfo,初始默認爲None,這就不能區分這個datetime到底是哪個時區,除非強行給datetime設置時區這個屬性。下面的系統時區恰好是UTC+8:00:

from datetime import datetime,timedelta,timezone
utc_8 = timezone(timedelta(hours=8))
now = datetime.now()
now
# datetime.datetime(2020, 2, 29, 19, 44, 0, 88943)
dt = now.replace(tzinfo = utc_8)
dt
# datetime.datetime(2020, 2, 29, 19, 44, 0, 88943, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章