在给定时区的当地时间不正确的utc

时间:2017-08-26 17:05:14

标签: python datetime utc

如果我运行此网址:https://api.sunrise-sunset.org/json?lat=12.98&lng=77.61&date=2017-08-26

我得到日出时间:“上午12:38:14” 这是UTC时间,如果我使用:

将其转换为给定的时区
from datetime import datetime
import pytz
from dateutil import tz

def convertUTCtoLocal(date, utcTime, timezone):
    """ converts UTC time to given timezone
    """
    to_zone = pytz.timezone(timezone)
    from_zone = _tz.gettz('UTC')
    utc = _datetime.strptime('%s %s' % (date, utcTime), '%Y-%m-%d %H:%M:%S')
    utc = utc.replace(tzinfo=from_zone)
    local = utc.astimezone(to_zone)
    return str(local.time())

但这会返回18:08:16 晚上时间,所以我在这里做错了什么。

鉴于timzone为Asia/Kolkata

示例:

>>> from datetime import datetime
>>> from dateutil import tz
>>> from_zone = tz.gettz('UTC')
>>> to_zone = tz.gettz('Asia/Kolkata')
>>> utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S')
>>> utcTime = "12:38:16" ## from json URL we get AM/PM but I remove it.
>>> utc = datetime.strptime('2017-08-26 {}'.format(utcTime), '%Y-%m-%d %H:%M:%S')
>>> utc
datetime.datetime(2017, 8, 26, 12, 38, 16)

>>> utc = utc.replace(tzinfo=from_zone)
>>> central = utc.astimezone(to_zone)
>>> central
datetime.datetime(2017, 8, 26, 18, 8, 16, tzinfo=tzfile('/usr/share/zoneinfo/Asia/Kolkata'))

1 个答案:

答案 0 :(得分:0)

问题在于你有“12:38:16 AM”这是实际的“00:38:16”所以你不能只是剥离“AM”。我改变了你的功能,因此它可以在“AM”和“PM”小时工作,只是在使用函数之前不要去掉“AM”和“PM”:

import pytz
from _datetime import datetime
from dateutil import tz

def convertUTCtoLocal(date, utcTime, timezone):
    """ converts UTC time to given timezone
    """
    to_zone = pytz.timezone(timezone)
    from_zone = tz.gettz('UTC')
    ## for formating with AM and PM hours in strptime you need to add
    ## %p at the end, also instead of %H you need to use %I
    utc = datetime.strptime('%s %s' % (date, utcTime), '%Y-%m-%d %I:%M:%S %p')
    utc = utc.replace(tzinfo=from_zone)
    local = utc.astimezone(to_zone)
    return str(local.time())


date = '2017-08-26'
utcTime = '12:38:14 AM' ## Don't strip AM or PM
timezone = 'Asia/Kolkata'
x = convertUTCtoLocal(date, utcTime, timezone)
print(x)

另外,您可以看到工作示例here