面临将 utc 时区转换为本地时区的困难
facing difficulties converting utc timezone to local
我得到这样的日期和时间
date_time = "2022-02-17 08:29:36.345374"
为了将这些转换为 AM、PM 格式,我正在做类似的事情
date_formate = datetime.fromisoformat(date_time).strftime('%d/%m/%Y %I:%M %p')
但我得到的结束时间不是本地时间,似乎是 UTC,我正在尝试将其转换为 utc,但没有运气做这样的事情
dtUTC = datetime.fromisoformat(date_formate[:-1])
dtZone = dtUTC.astimezone()
print(dtZone.isoformat(timespec='seconds'))
在 Whosebug 上找到了这个解决方案,但 收到错误 Invalid isoformat string: '2022-02-17 08:29:36.345374'
如果您不指定时区/UTC 偏移量,Python 默认采用本地时间。所以在这种情况下,需要先设置UTC,然后转换,再格式化(如果你想要一个字符串作为输出):
from datetime import datetime, timezone
date_time = "2022-02-17 08:29:36.345374" # UTC is not specified here...
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone()
print(local) # my tz was on UTC+1 at that date...
# 2022-02-17 09:29:36.345374+01:00
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 09:29 AM
如果astimezone(None)
不行,可以试试tzlocal;
import tzlocal
zone = tzlocal.get_localzone()
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone(zone)
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 09:29 AM
或从 timedelta 派生时区对象,例如
from datetime import timedelta
zone = timezone(timedelta(minutes=-300)) # UTC-5 hours
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone(zone)
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 03:29 AM
我得到这样的日期和时间
date_time = "2022-02-17 08:29:36.345374"
为了将这些转换为 AM、PM 格式,我正在做类似的事情
date_formate = datetime.fromisoformat(date_time).strftime('%d/%m/%Y %I:%M %p')
但我得到的结束时间不是本地时间,似乎是 UTC,我正在尝试将其转换为 utc,但没有运气做这样的事情
dtUTC = datetime.fromisoformat(date_formate[:-1])
dtZone = dtUTC.astimezone()
print(dtZone.isoformat(timespec='seconds'))
在 Whosebug 上找到了这个解决方案,但 收到错误 Invalid isoformat string: '2022-02-17 08:29:36.345374'
Python 默认采用本地时间。所以在这种情况下,需要先设置UTC,然后转换,再格式化(如果你想要一个字符串作为输出):
from datetime import datetime, timezone
date_time = "2022-02-17 08:29:36.345374" # UTC is not specified here...
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone()
print(local) # my tz was on UTC+1 at that date...
# 2022-02-17 09:29:36.345374+01:00
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 09:29 AM
如果astimezone(None)
不行,可以试试tzlocal;
import tzlocal
zone = tzlocal.get_localzone()
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone(zone)
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 09:29 AM
或从 timedelta 派生时区对象,例如
from datetime import timedelta
zone = timezone(timedelta(minutes=-300)) # UTC-5 hours
local = datetime.fromisoformat(date_time).replace(tzinfo=timezone.utc).astimezone(zone)
local_formatted = local.strftime('%d/%m/%Y %I:%M %p')
print(local_formatted)
# 17/02/2022 03:29 AM