【发布时间】:2020-11-22 00:18:01
【问题描述】:
我正在尝试验证日期是否不早于当前时间。所以我在论坛的某个地方读到我应该使用timezone.now() 而不是datetime.now()
Django 为您提供了一个时区感知的日期时间对象。日期时间.now() 给你一个时区天真的日期时间对象。你无法比较 这些。
改为使用 django.utils.timezone.now(),它提供了日期时间的类型
所以基本上作为 Django 开发人员,我应该更好地使用 Django 默认提供的功能。我在主设置文件中获得了这些设置:
TIME_ZONE = 'Europe/Vilnius'
USE_I18N = True
USE_L10N = True
USE_TZ = True
这是我验证提供的日期/时间的逻辑:
if date <= timezone.now():
raise serializers.ValidationError("Meeting could not start earlier than the current time")
return date
但它总是返回日期对象而不是引发ValidationError。这些是我正在玩的时间:
if timezone.now() < parse(reservation['date_from']):
raise serializers.ValidationError("Meeting could not start earlier than the current time")
!注意:我使用.parse() 将对象从str 转换为datetime 对象。
timezone.now() returns - 2020-11-22 00:16:55.334792+00:00
reservation['date_from'] returns - 2020-12-04T16:32:00+02:00
reservation['date_from'] returns - 2020-12-04 16:32:00+02:00
【问题讨论】:
-
第二个例子
reservation['date_from']timezone.now() 所以验证通过了。也许你需要这样的翻转if parse(reservation['date_from']) < timezone.now(): -
我将
timezone.now()更改为timezone.localtime(timezone.now())以返回 UTC3,但仍然失败。 -
2020-11-22 02:56:45.295127+02:00- 服务器时间,请求时间 -2020-11-22 04:40:00+02:00