在python中本地化日期时间

时间:2020-05-10 20:24:21

标签: python datetime flask

概述 我从server_x接收到时间戳,我的应用程序位于server_y上,两者都位于不同的区域,我的应用程序调用server_x api并接收具有时间戳记的json,现在我需要执行关于server_y的一些计算,为此,我需要确保从server_x接收到的时间戳可以用于掩盖server_y的本地日期时间,因此两者都是同步的

我想将datetime.now()转换为我从服务器收到的时区,例如UTC-07:00

当前解决方案,我将server_timestamp传递给函数,然后将其区域信息传递给datetime.now

    Server_timestamp = "2020-04-04T10:24:49.000-0700"
    dt = datetime.strptime(Server_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
    convert_local = datetime.now(dt.tzinfo)

问题: 我需要将服务器的时区保存在db中,然后使用它而不是每次都传递server_timestamp来代替,tzinfo的类型为datetime.timezone = UTC-07:00,在存储此字符串后如何我用它来更改当地时间。

2 个答案:

答案 0 :(得分:1)

这是一个利用datetime库将datetime对象从一个时区转换到另一个时区的函数:

from datetime import datetime
import pytz

def convert_tz(dt, current_tz, out_tz):
    return dt.replace(tzinfo=current_tz).astimezone(tz=out_tz)

now = datetime.now(tz=pytz.timezone('US/Eastern'))
convert = datetime.now().astimezone().tzinfo

print(now)
print(utc_to_local(now, now.tzinfo, convert))

输出:

2020-05-10 17:02:44.245703-04:00
2020-05-10 16:02:44.245703-05:00

我使用pytz库进行演示。对于您来说,要获取服务器的时区,请使用行datetime.now().astimezone().tzinfo

答案 1 :(得分:0)

我实施了一个解决方案。 现在,我将时间戳的最后5个字符保​​存在“ -0700”数据库中。

rails console
相关问题