python - 如何使用python将带有时区的字符串转换为utc中的日期时间?

标签 python datetime timezone

我是 Python 新手。我被困在一点。我有将时间存储为具有指定时区的字符串的变量。

它看起来像下面给出的

>>> print usertime
2017-08-18T08:00:00+04:30
>>> type(usertime)
<type 'str'>

所以我只想将 usertime 时间转换为 utc 时间,输出应该从 2017-08-18T08:00 减去 4 小时 30 分钟: 00。输出转换如下所示:2017-08-18T03:30:00 按照 utc 格式。

最佳答案

您想先将字符串转换为类似日期时间的对象。您的字符串的问题是时区的格式 datetime 无法识别。

你可以使用 pandas Timestamp

import pandas as pd

ts = pd.Timestamp(string).tz_convert("UTC")
output = ts.strftime("%Y-%m-%dT%H:%M:%S")

或者,如果您不想安装/使用 Pandas,可以转换字符串格式,然后使用 datetime

import datetime
import pytz
import re

# Remove the ':' from the timezone, if it's there.
string = re.sub("\+(?P<hour>\d{2}):(?P<minute>\d{2})$", "+\g<hour>\g<minute>" , string)
# Create the datetime object.
dt = datetime.datetime.strptime(string, "%Y-%m-%dT%H:%M:%S%z")
# Convert to UTC
dt = dt.astimezone(pytz.UTC)
output = dt.strftime("%Y-%m-%dT%H:%M:%S")

如果您使用的是 python 2.7,并且在调用 strptime 时无法指定 %z,标准的解决方法是这样做:

def parse(string):
    dt = datetime.strptime(string[0:19],'%Y-%m-%dT%H:%M:%S')
    if string[19] == "+":
        dt -= datetime.timedelta(hours=int(string[20:22]), 
                                 minutes=int(string[22:]))
    elif t[19]=='-':
        dt += datetime.timedelta(hours=int(string[20:22]),
                                 minutes=int(string[22:]))
    return dt

与 Stefano 的回答相比,上述方法的优点在于它们可以使用任意偏移量。不只是四个半小时。

关于python - 如何使用python将带有时区的字符串转换为utc中的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650853/

相关文章:

python - 异常消息 : What does it mean? - django 1.8 python 3.4 - python manage.py makemigrate

python - 所有切片操作都返回一个新列表?

php - 数据库中的 DATETIME 问题

java - Joda Time 日期时区

带有空格的python字符串输入问题!

c# - 具有特定时区的 Javascript 整数到日期时间

mysql - 计算日期范围内每个工作日的工作时间

mysql - Django:存储在 MySQL 数据库中的时区不正确

sql - 如何转换时间戳的时区以便在 Oracle DB 中进行比较?

printing - Python 解释器中的 `>>> some_object` 和 `>>> print some_object` 有什么区别?