【问题标题】:Convert UTC string to local datetime string in python? [duplicate]在python中将UTC字符串转换为本地日期时间字符串? [复制]
【发布时间】:2014-02-04 22:59:20
【问题描述】:

我没有时区的名称,只有一个偏移值,比如+0400

我有 UTC 格式的日期时间字符串:比如 2014-01-07T09:29:35Z

我想要一个当地时间的字符串,比如2014-01-07T13:29:35

如何做到这一点?

【问题讨论】:

  • @Thrustmaster 请阅读“我没有时区名称”的问题。
  • @ATOzTOA 你有互联网连接吗?

标签: python datetime


【解决方案1】:

你可以写一个函数来转换字符串格式。

from datetime import datetime, timedelta
old_time = '2014-01-07T09:29:35Z'

def time_converter(old_time, time_zone):
    time_zone = float(time_zone[:3] + ('.5' if time_zone[3] == '3' else '.0'))
    str_time = datetime.strptime(old_time, "%Y-%m-%dT%H:%M:%SZ")
    return (str_time + timedelta(hours=time_zone)).strftime("%Y-%m-%dT%H:%M:%SZ")

if __name__ == '__main__':
    for time_zone in ('+0400', '+0430', '-1400'):
        print(time_converter(old_time, time_zone))

输出:

2014-01-07T13:29:35Z
2014-01-07T13:59:35Z
2014-01-06T19:29:35Z

【讨论】:

  • 谢谢,这对我有用。
【解决方案2】:

您还可以创建时区类来创建时区感知日期时间对象:

from datetime import tzinfo, timedelta, datetime

class myTimeZone(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=4)
    def dst(self, dt):
        return timedelta(hours=0)

class utcTimeZone(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=0)
    def dst(self, dt):
        return timedelta(hours=0)

d = datetime.strptime("2014-01-07T09:29:35Z","%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=utcTimeZone())
print(d.astimezone(myTimeZone()).isoformat())   # Prints '2014-01-07T13:29:35+04:00'

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2011-06-13
    • 2018-02-23
    • 1970-01-01
    • 2015-10-24
    • 2012-08-04
    • 2018-05-22
    • 2012-07-25
    • 2023-03-14
    相关资源
    最近更新 更多