簡體   English   中英

如何在Python中將日期時間轉換為UTC時間戳?

[英]How do I convert a datetime to a UTC timestamp in Python?

來自http://docs.python.org/library/time.html

time.mktime(t):這是localtime()的反函數。 它的參數是struct_time或完整的9元組(因為需要dst標志;如果它是未知的,則使用-1作為dst標志),它以本地時間而不是UTC表示時間。 它返回一個浮點數,以便與time()兼容。 如果輸入值不能表示為有效時間,則會引發OverflowError或ValueError(這取決於Python或底層C庫是否捕獲到無效值)。 它可以生成時間的最早日期取決於平台。

這表示您需要在當地時間而不是UTC指定時間元組。 但是,我想用UTC指定; 我不想在盒子上使用本地時區。

有什么方法可以從datetime到時間戳,其中時間被視為UTC? 當我轉換為時間戳和從時間戳轉換時,我希望能夠將所有內容保存在規范化的UTC表單(datetime對象)中。

我希望能夠做這樣的事情,讓x和y出現相同:

 y = datetime.datetime.utcfromtimestamp(time.mktime(x.timetuple()))
 x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT')
 stamp = time.mktime(x.timetuple())
 y = datetime.datetime.utcfromtimestamp(stamp)
 x
datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc())
 y
datetime.datetime(2010, 10, 28, 6, 17)

我想你正在尋找calendar.timegm

import datetime
import dateutil.parser
import calendar

x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT')
stamp = calendar.timegm(x.timetuple())
y = datetime.datetime.utcfromtimestamp(stamp)
print(repr(x))
# datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc())

print(repr(y))
# datetime.datetime(2010, 10, 27, 22, 17)

來自stdlib的email包可以解析rfc 5322格式的時間字符串(以前的rfc 2822,rfc 822):

#!/usr/bin/env python
from datetime import datetime, timedelta
from email.utils import mktime_tz, parsedate_tz

time_tuple = parsedate_tz('Wed, 27 Oct 2010 22:17:00 GMT')
posix_timestamp = mktime_tz(time_tuple)  # integer
utc_time = datetime(*time_tuple[:6])     # naive datetime object
assert utc_time == (datetime(1970, 1, 1) + timedelta(seconds=posix_timestamp))

請參閱Python:使用電子郵件中的時區解析日期

要將表示UTC時間的天真日期時間對象轉換為POSIX時間戳,請執行以下操作:

posix_timestamp = (utc_time - datetime(1970, 1, 1)).total_seconds()

請參閱在Python中將datetime.date轉換為UTC時間戳

暫無
暫無

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

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