如何将以下本地化日期时间字符串转换为UTC日期时间。该字符串包含其中提到的日期,时间和时区,例如May 15,2015, 04.24AM IST
,这里IST是印度标准时间。它可以是任何时区。
我尝试使用pytz但无法使其正常工作。
答案 0 :(得分:2)
问题在于,使用缩写的时区信息解析字符串非常困难。但是,如果你知道你的时区,那么你可以查找pytz
识别的名字。您甚至可以使用pytz.all_timezones
列出所有时区名称。
在您的情况下,它是'Asia / Calcutta',这应该可以将其转换为UTC。只需从字符串中删除时区信息并稍后添加:
import pytz
import datetime
# String without timezone info
str = "May 15, 2015, 04.24AM"
# Parse it to naive time
dt = datetime.datetime.strptime(str, "%b %d, %Y, %I.%M%p")
# Localize it as Asia/Calcutta
dt_localized = pytz.timezone('Asia/Calcutta').localize(dt)
# Convert it to UTC
dt_utc = dt_localized.astimezone(pytz.timezone('UTC'))
我们得到:
>>> dt
datetime.datetime(2015, 5, 15, 4, 24)
>>> dt_localized
datetime.datetime(2015, 5, 15, 4, 24, tzinfo=<DstTzInfo 'Asia/Calcutta' IST+5:30:00 STD>)
>>> dt_utc
datetime.datetime(2015, 5, 14, 22, 54, tzinfo=<UTC>)
答案 1 :(得分:1)
首先,让我们删除IST时区的日期字符串,然后将其分配给亚洲/加尔各答时区。
import pytz
dt_str = "May 15, 2015, 04.24AM IST"
dt_str_naive = dt_str[:-4]
new_dt = (pytz.timezone('Asia/Calcutta')
.localize(dt.datetime.strptime(dt_str_naive, "%b %d, %Y, %I.%M%p")))
现在可以识别时区,您可以将其分配给UTC时区:
>>> new_dt.astimezone(pytz.UTC)
datetime.datetime(2015, 5, 14, 22, 54, tzinfo=<UTC>)