为什么在使用timedelta格式化之后,我在python中的日期是错误的?

2024-09-27 14:30:03 发布

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

我正在使用Django,需要计算的日期有问题。 变量数据>;测试时间应为17:00,而不是15:00。为什么我一格式化日期就会发生这种情况

我的时区是欧洲/柏林。更改时区会影响测试中的时间打印。它总是-2h

def date(req):
    now = timezone.now()
    model = MyModel.objects.filter(date__gt=now).first()
    next = model.date
    future = timezone.timedelta(hours=float(model.future)) #model.future = 1.5
    open = next-future
    date = next.strftime('%Y/%m/%d')
    data = {
        'next': next,
        'date': date,
        'time': open.astimezone(timezone.utc).strftime('%Y-%m-%d %H:%M:%S.%f'),
        'test': open.strftime('%Y/%m/%d %H:%M:%S%z')
    }

我得到的是:

next: 20. November 2021 18:30
date: 2021/11/20
time: 2021-11-20 15:15:00.000000
test: 2021/11/20 15:00:00+0000

Tags: 数据djangotestgtdatemodeltime时间
3条回答

https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#naive-and-aware-datetime-objects

你应使用:

from django.utils import timezone
now = timezone.now()

Datetime不知道时区

您可以使用.strftime()剪切时区信息(偏移量+02:00)。您需要将其包含在%z中

如果要将其转换为已添加偏移量的时间字符串

打开.astimezone(timezone.utc).strftime(“%Y-%m-%d%H:%m:%S.%f”)

这对我有用

from django.utils import timezone

def date(req):
    now = timezone.now()
    model = MyModel.objects.filter(date__gt=now).first()
    next = model.date
    future = timezone.timedelta(hours=float(model.future)) #model.future = 1.5
    open = next-future
    date = timezone.localtime(open)
    data = {
        'next': date.strftime('%Y/%m/%d %H:%M:%S'),
        'date': date.strftime('%Y/%m/%d'),
        'time': date.strftime('%H:%M:%S'),
    }

相关问题 更多 >

    热门问题