【发布时间】:2021-08-25 09:29:08
【问题描述】:
因此,“2021-08-17T20:03:36.480-07:00”作为字符串给出。我想把它转换成当地时间。
类似这样的 2020-01-06 00:00:00。
这是我之前尝试过的
from datetime import datetime
def convert_utc_local(utc_time):
conv_time = ' '.join(utc_time.split("T"))
return conv_time.astimezone(tzlocal())
错误来了
return utc_time.astimezone(tzlocal())
AttributeError: 'str' object has no attribute 'astimezone'"
所以对我有用的是:
def convert_utc_local(utc_time):
to_zone = tz.gettz('Asia/Tokyo')
iso_to_local = datetime.fromisoformat(utc_time).astimezone(to_zone)
dt = str(iso_to_local.replace(tzinfo=None).isoformat(' ', timespec='seconds'))
return dt
【问题讨论】:
-
我相信你已经尝试了一些东西,对吧?请也发布您的尝试。并且另外尝试阅读How to Ask和minimal reproducible example。
-
查看文档,您会发现datetime.fromisoformat。现在与 astimezone 结合,你就有了:
datetime.fromisoformat("2021-08-17T20:03:36.480-07:00").astimezone(None)... -
在给出minimal reproducible example 时,您应该包含 error,这可能与您将字符串视为日期时间的事实有关(您永远不会实际使用导入的
datetime) 和tzlocal没有定义。 -
@chixy 你想把
2021-08-17T20:03:36.480-07:00转换成2020-01-06 00:00:00你是说这个还是我听不懂? -
@Xitiz:在链接的问答中,iso 字符串没有指定 UTC 偏移量,因此 UTC 在接受的答案中明确设置为 tzinfo。如果你在这里做同样的事情,结果是不正确的。
标签: python python-3.x datetime