Python。如何使用创建本地日期时间日期时间。今天()

2024-09-22 16:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

服务器发送一个字符串,I striptime并保存在一个名为time_from_frontend的变量中,然后添加一个如下所示的tzinfo:

import pytz

my_timezone = pytz.timezone("America/Guayaquil")

A = time_from_frontend.replace(tzinfo=my_timezone)
print A
print A.tzinfo

B = (datetime.datetime.today()).replace(tzinfo=my_timezone)
print B
print B.tzinfo

print B - A

为什么a和B的差别很大?以下是终端打印的内容:

^{pr2}$

前端向我发送实际时间,当我指定时区时,我以为a时间和B时间之间会有微小的差别(即微秒),但我得到了5个小时。这是时区差异(“美洲/瓜亚基尔”是GMT-5)。在

我有点理解这个错误。但我该怎么解决呢?有没有办法创建一个与本地时间相对应的datetime.today()对象?在


Tags: 字符串fromtodaydatetimetimemy时间replace
2条回答

我猜您前端的datetime是UTC格式的。执行替换操作实际上不会转换日期时间。它使用data/hour/等,只使用一个新的时区。在

当您调用datetime.today()时,您将创建一个不带任何时区信息的原始datetime。当您对此进行replace操作时,它实际上也没有进行转换,它只是假设您给它的日期已经在您提供的时区中,与您在服务器时间上所做的替换相同。在

要将datetime转换为另一个时区,您需要使用^{}。如果来自服务器的datetime也是天真的,并且没有指定时区,astimezone将出错。来解决这个问题。首先添加UTC的时区。在

time_from_frontend = time_from_frontend.replace(tzinfo=pytz.timezone('UTC'))
converted_server_time = time_from_frontend.astimezone(my_timezone)

datetime.today()已经返回本地日期时间(结果与datetime.now()几乎相同)。两者都将本地时间作为原始日期时间对象返回(除非要立即显示,否则请避免使用它们)。在

获取给定时区中当前时间的正确方法是使用^{}

#!/usr/bin/env python
from datetime import datetime
import tzlocal # $ pip install tzlocal

local_time = datetime.now(tzlocal.get_localzone())

即使在DST转换期间,当本地时间可能不明确时,它也可以工作(在这种情况下,使用朴素的datetime.today()可能失败)。在

tzlocal返回一个pytztzinfo对象,因此它处理过去可能具有不同UTC偏移量的时区(在这种情况下,非pytz代码可能会失败)。在


您的代码中有几个问题:

另请参见:

相关问题 更多 >