編寫函數將datetime和UTC轉化爲timestamp

這道習題來源於廖雪峯python教程常用內建模塊-datetime

題目要求:假設你獲取了用戶輸入的日期和時間如2015-1-21 9:01:30,以及一個時區信息如UTC+5:00,均是str,請編寫一個函數將其轉換爲timestamp

解決思路一:1970年1月1日 00:00:00 UTC+00:00時區的時刻稱爲epoch time,記爲0(1970年以前的時間timestamp爲負數),當前時間就是相對於epoch time的秒數,稱爲timestamp。timestamp()函數能夠根據當前系統的UTC時間自動將當前的datetime轉換爲統一的時間格式,與地區無關。因此可以:

  • 將其他區的時間統一轉換到UTC+8區的時間。

解決思路二:datetime類型有一個時區屬性tzinfo,但是默認爲none,所以是當前系統的UTC時間。因此可以:

  • 給datetime強制設置一個時區。
import re
from datetime import datetime, timezone, timedelta


def to_timestamp(dt_str, tz_str):
    cday = datetime.strptime(dt_str,'%Y-%m-%d %H:%M:%S')
    cutc = re.match(r'...([\+\-]\d+)...', tz_str).group(1)
    
    t1 = cday + timedelta(hours=8-int(cutc))
    t2 = cday.replace(tzinfo=timezone(timedelta(hours=int(cutc))))

    return t1.timestamp()
#   return t2.timestamp() 2種方法都可以

# 測試:
t1 = to_timestamp('2015-6-1 08:10:30', 'UTC+7:00')
assert t1 == 1433121030.0, t1

t2 = to_timestamp('2015-5-31 16:10:30', 'UTC-09:00')
assert t2 == 1433121030.0, t2
print('ok')

通過上述練習我們學習到了:

1、strptime函數的用法

2、正則表達式的用法

3、tzinfo的用法

4、timestamp函數的意義

 

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