Django & timezone,一天的开始:我应该在函数中使用make_aware()一次还是两次?

nbysray5  于 2023-04-22  发布在  Go
关注(0)|答案(2)|浏览(115)

我有一个简单的函数,它返回Django中一天的开始(默认情况下,今天的一天):

import datetime
from django.utils.timezone import make_aware

def DayBeginning(DateTime="Now"):
    if DateTime == "Now":
        DateTime = make_aware(datetime.datetime.today())
    year = DateTime.year
    month = DateTime.month
    day = DateTime.day
    return make_aware(datetime(year, month, day, 0, 0, 0, 0))

我担心如果我调用两次“make_aware”,我可能会抵消结果。我做得对吗?(我的时区是'欧洲/巴黎')
PS:请随意批评我的代码,我是一个新手开发者

kxe2p93d

kxe2p93d1#

我会这样做:

from django.utils.timezone import localtime

def day_beginning(dt=None):
    # if dt is None, localtime() operates on now()
    return localtime(dt).replace(hour=0, minute=0, second=0, microsecond=0)
rjzwgtxy

rjzwgtxy2#

感谢@Kevin Christopher亨利我能够编写一个更好的函数:

import datetime
from django.utils.timezone import make_aware

def DayBeginning(DateTime=None):
    if not DateTime :
        DateTime = make_aware(datetime.datetime.today())
    else :
        try :
            DateTime= make_aware(DateTime)
        except ValueError :
            pass
    return DateTime.replace(hour=0, minute=0, second=0, microsecond=0)

我想使用make_aware来始终使用我的服务器的时区设置,我不确定本地时间(例如,如果服务器不在同一个国家)
make_aware返回一个ValueError,如果你给予它一个已经有时区设置的日期时间,这就是try/except的原因。

相关问题