簡體   English   中英

將python datetime轉換為時間戳並以UTC格式返回仍然使用本地時區

[英]Converting python datetime to timestamp and back in UTC still uses local timezone

我正在使用一個代碼,它給我utc時間戳,我想將它們轉換為適當的日期時間。 不幸的是,當我用pytz測試簡單的情況時,日期時間增加了6個小時(CST偏移到UTC)。 我需要保持時區數據的正確性,因為我正在計算其他時區之間的差異。 任何想法為什么以及如何將utc時間戳轉換為utc日期時間?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)

從“紀元以來的秒數”時間戳獲取一個表示UTC時間的天真日期時間對象:

from datetime import datetime

utc_dt = datetime.utcfromtimestamp(ts)

如果要獲取UTC時區的感知日期時間對象:

import pytz

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

要將其轉換為其他時區:

tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)

要將時間戳直接轉換為給定時區中的感知日期時間對象:

dt = datetime.fromtimestamp(ts, tz)

嗯,我在這里找到答案: 如何在轉換為Unix時指定時區(UTC)? (蟒蛇)

In [101]: ts = calendar.timegm(datetime(2010, 7, 1, tzinfo=pytz.utc).timetuple())

In [102]: datetime.fromtimestamp(ts, tz=pytz.utc)
Out[102]: datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)

您是否恰好在美國CST時區或同等地區?

看起來它顯示當你的當地時間是2007年1月1日午夜時的UTC時間。

暫無
暫無

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

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