![](/img/trans.png)
[英]How do I convert a string to a python datetime object with a relevant timezone?
[英]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
范圍更窄)。
這個問題很老了,但我想給出一個更全面的答案。
關於unix時間戳:
時間戳是從絕對時間點(UTC 時間 1970 年 1 月 1 日午夜)以來經過的秒數(或毫秒)。 (UTC 是格林威治標准時間,沒有夏令時調整。)
fromtimestamp
確實將 unix 時間戳轉換為您平台的時間。 如果您在不同平台上工作,正確設置平台的時區很重要。 如果您希望它使用 UTC, utcfromtimestamp
。
要直接回答 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.