簡體   English   中英

Python:如何將 unixtimestamp 和 timezone 轉換為 datetime 對象?

[英]Python: How to convert unixtimestamp and timezone into datetime object?

我有一個 csv 文件,日期時間為 unixtimestamp 格式,毫秒和時區信息也以毫秒為單位。 我想將其轉換為更有用的日期時間格式以供進一步處理。

例如,時間是1437323953822 ,時區是-14400000

我可以通過使用將時間戳轉換為日期時間

datetime.datetime.fromtimestamp(1437323953822/1000)

但是我現在如何合並時區,根據我所知,時區為 -4 UTC 時間。

(-14400000 / 1000 / 60 / 60) = -4

我如何使用這個時區來獲取實際時間?

fromtimestamp還可以為時區采用另一個參數,即tzinfo的子類:

classmethod datetime.fromtimestamp(timestamp[, tz])

返回 POSIX 時間戳對應的本地日期和時間,如time.time()返回。 如果可選參數tz為 None 或未指定,則時間戳將轉換為平台的本地日期和時間,並且返回的日期時間對象是幼稚的。

否則tz必須是類tzinfo子類的實例,時間戳轉換為tz的時區。 在這種情況下,結果相當於tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

fromtimestamp()已經返回您的本地時間,即,如果fromtimestamp()自動正確確定它,您不需要附加 utc 偏移量:

#!/usr/bin/env python
from datetime import datetime

local_time = datetime.fromtimestamp(1437323953822 * 1e-3)
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000)

在某些情況下, fromtimestamp()可能會失敗,例如,如果本地時區過去有不同的 UTC 偏移量,並且fromtimestamp()不使用給定平台(特別是 Windows)上的歷史時區數據庫。 在這種情況下,根據 utc 時間和給定的 utc 偏移量顯式構造本地時間:

#!/usr/bin/env python
from datetime import datetime, timedelta

utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=1437323953822)
utc_offset = timedelta(milliseconds=-14400000)
local_time = utc_time + utc_offset
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000)

Python 總是期望 POSIX Epoch ,因此可以對其進行硬編碼。 顯式公式可能更精確(沒有舍入誤差),並且它可以接受更廣泛的輸入時間戳( fromtimestamp()范圍取決於平台,並且可能比相應的datetime范圍更窄)。

這個問題很老了,但我想給出一個更全面的答案。

  1. 關於unix時間戳:
    時間戳是從絕對時間點(UTC 時間 1970 年 1 月 1 日午夜)以來經過的秒數(或毫秒)。 (UTC 是格林威治標准時間,沒有夏令時調整。)

  2. fromtimestamp確實將 unix 時間戳轉換為您平台的時間。 如果您在不同平台上工作,正確設置平台的時區很重要。 如果您希望它使用 UTC, utcfromtimestamp

  3. 要直接回答 OP 的問題,以下代碼將根據偏移量創建時區。

from datetime import datetime, timezone, timedelta

ts = int('1604750712')
tz = timezone(-timedelta(hours=4))

print(datetime.fromtimestamp(ts, tz).strftime('%Y-%m-%d %H:%M:%S'))

timezone對象是tzinfo一個具體類,我已經用 UTC 4 小時的負偏移量啟動了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM