为什么使用 timedelta 格式化后 python 中的日期不正确?
Why is my date in python wrong after formating using timedelta?
我正在使用 Django,但我需要计算日期时遇到问题。
变量数据 > 测试应该是 17:00 而不是 15:00。为什么我一格式化日期就出现这种情况?
我的时区是Europe/Berlin。更改时区必须影响测试中的时间打印。它总是-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
https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#naive-and-aware-datetime-objects
你应该使用:
from django.utils import timezone
now = timezone.now()
日期时间不识别时区。
您使用 .strftime() 剪切了时区信息(偏移量 +02:00)。您需要将其包含在 %z 中。
如果您想将其转换为已添加偏移量的时间字符串。
open.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'),
}
我正在使用 Django,但我需要计算日期时遇到问题。 变量数据 > 测试应该是 17:00 而不是 15:00。为什么我一格式化日期就出现这种情况?
我的时区是Europe/Berlin。更改时区必须影响测试中的时间打印。它总是-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
https://docs.djangoproject.com/en/3.2/topics/i18n/timezones/#naive-and-aware-datetime-objects
你应该使用:
from django.utils import timezone
now = timezone.now()
日期时间不识别时区。
您使用 .strftime() 剪切了时区信息(偏移量 +02:00)。您需要将其包含在 %z 中。
如果您想将其转换为已添加偏移量的时间字符串。
open.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'),
}