Python:从时间戳中添加或删除时区小时并获取实际时间

标签 python python-3.x python-2.7 datetime python-datetime

在Python中,我需要将给定字符串时间戳的实际时间转换为不带时区信息的不同时区。我正在使用 pytz 来做到这一点。但我得到的只是给定的 DateTime 以及附加的时区信息。

基准日期时间:2020-05-29 19:00:00(没有时区信息的字符串日期时间)

要求:当该时间转换为(美国邮政编码90071)-0700时区时, 它应该返回“2020-05-29 12:00:00”,而不是“2020-05-29 19:00:00-0700

代码:

import pytz
from datetime import datetime
from uszipcode import SearchEngine
from timezonefinder import TimezoneFinder

date_time_obj = datetime.strptime("2020-05-29 19:00:00", '%Y-%m-%d %H:%M:%S')
zip = "90071"

search = SearchEngine(simple_zipcode=True)
zipcode = search.by_zipcode(zip)
zipcode = zipcode.to_dict()
tf = TimezoneFinder(in_memory=True)
timezone = tf.timezone_at(lng=zipcode['lng'], lat=zipcode['lat'])
tz = pytz.timezone(timezone)
new_timestamp = tz.localize(date_time_obj)

new_timestamp_str = datetime.strftime(new_timestamp, '%m/%d/%Y %H:%M:%S')

但这会返回2020-05-29 19:00:00.000000-0700。我需要检索一个 DateTime 对象/字符串,其中包含该时区中显示的实际时间,而没有附加到 DateTime 末尾的时区 block 。

最佳答案

假设您的“基准日期时间”指的是 UTC,您必须先添加 tzinfo=UTC 然后转换到另一个时区。另外,请避免覆盖 zip 等内置函数。使用 dateutil 的示例:

from datetime import datetime
import dateutil
from uszipcode import SearchEngine
from timezonefinder import TimezoneFinder

date_time_obj = datetime.strptime("2020-05-29 19:00:00", '%Y-%m-%d %H:%M:%S')
zipcode = "90071"

search = SearchEngine(simple_zipcode=True)
zipcode = search.by_zipcode(zipcode)
zipcode = zipcode.to_dict()
tf = TimezoneFinder(in_memory=True)
timezone = tf.timezone_at(lng=zipcode['lng'], lat=zipcode['lat'])

# localize to UTC first
date_time_obj = date_time_obj.replace(tzinfo=dateutil.tz.UTC)

# now localize to timezone of the zipcode:
new_timestamp = date_time_obj.astimezone(dateutil.tz.gettz(timezone))

new_timestamp_str = datetime.strftime(new_timestamp, '%m/%d/%Y %H:%M:%S')
# '05/29/2020 12:00:00'

如果您需要使用pytz,请确保使用localize而不是replace(即使UTC是一个异常(exception))。

旁注:如果您的“基准日期时间”指的是本地时间(操作系统),您可以通过以下方式获取该时区

import time
import dateutil
localtzname = time.tzname[time.daylight]
tz = dateutil.tz.gettz(localtzname)

关于Python:从时间戳中添加或删除时区小时并获取实际时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62087679/

相关文章:

python - Web 自动化可以用 Python 完成吗?

python - 如何在大文本文件中标记情感极性?

python - 从正在运行的 Python3 session 中激活 virtualenv

python - 看起来相同但编码不同的字符串

python - 应用引擎 : map form data to url

python - Import as 语句对不同模块的工作方式不同?

python zeroconf 显示 IPv4 地址

python-3.x - 重复数组直到一定长度 groupby pandas

python - 如何使用 isinstance() 检查对象是否为文件?

python - python 中的慢 for 循环