[英]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))
要將表示UTC時間的天真日期時間對象轉換為POSIX時間戳,請執行以下操作:
posix_timestamp = (utc_time - datetime(1970, 1, 1)).total_seconds()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.