Python 學習之常用內建模塊(datetime)

datetime 是 Python 處理日期和時間的標準庫。

獲取當前日期和時間

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

# 獲取當前datetime:
now = datetime.now()
print(now)
print(type(now))

注意: datetime 是模塊,datetime 模塊還包含一個 datetime 類,通過 from datetime import datetime 導入的纔是 datetime 這個類。
如果僅導入 import datetime,則必須引用全名 datetime.datetime。
datetime.now() 返回當前日期和時間,其類型是 datetime。

獲取指定日期和時間

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = datetime(2020,5,20,13,14)
print(t)

datetime 轉換爲 timestamp

在計算機中,時間實際上是用數字表示的。我們把 1970 年 1 月 1 日 00:00:00 UTC+00:00 時區的時刻稱爲 epoch time ,記爲 0(1970年以前的時間timestamp爲負數),當前時間就是相對於 epoch time 的秒數,稱爲timestamp。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = datetime(2020,5,20,13,14)
print(t.timestamp())

注意: Python 的 timestamp 是一個浮點數。如果有小數位,小數位表示毫秒數。

timestamp 轉換爲 datetime

使用 datetime 提供的 fromtimestamp() 方法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = 1589951640.0
print(datetime.fromtimestamp(t))        # 本地時間
print(datetime.utcfromtimestamp(t))  # UTC時間

注意: timestamp 是一個浮點數,它沒有時區的概念,而 datetime 是有時區的。

str 轉換爲 datetime

使用 datetime 提供的 strptime() 方法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

day = datetime.strptime('2020-5-20 13:14:00','%Y-%m-%d %H:%M:%S')
print(day)

注意: 轉換後的 datetime 是沒有時區信息的。

datetime 轉換爲 str

轉換方法是通過 strftime() 實現:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

now = datetime.now()

print(now.strftime('%a, %b %d %H:%M'))

datetime 加減

需要導入 timedelta 這個類,使用 timedelta 你可以很容易地算出前幾天和後幾天的時刻。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime, timedelta

cday = datetime.strptime('2020-5-20 13:14:00', '%Y-%m-%d %H:%M:%S')

print('current datetime =', cday)
print('current + 10 hours =', cday + timedelta(hours=10))
print('current - 1 day =', cday - timedelta(days=1))
print('current + 2.5 days =', cday + timedelta(days=2, hours=12))

本地時間轉換爲 UTC 時間

本地時間是指系統設定時區的時間,例如北京時間是 UTC+8:00 時區的時間,而UTC時間指 UTC+0:00 時區的時間。
時區轉換的關鍵在於,拿到一個 datetime 時,要獲知其正確的時區,然後強制設置時區,作爲基準時間。
利用帶時區的 datetime,通過 astimezone() 方法,可以轉換到任意時區。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 內建模塊—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime, timedelta, timezone

utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
utc8_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print('UTC+0:00 now =', utc_dt)
print('UTC+8:00 now =', utc8_dt)

注意:不是必須從 UTC+0:00 時區轉換到其他時區,任何帶時區的 datetime 都可以正確轉換。

小結

datetime 表示的時間需要時區信息才能確定一個特定的時間,否則只能視爲本地時間。

如果要存儲 datetime,最佳方法是將其轉換爲 timestamp 再存儲,因爲 timestamp 的值與時區完全無關。

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