【问题标题】:datetime-local time format does not conform to the required formatdatetime-本地时间格式不符合要求的格式
【发布时间】:2020-10-28 09:11:49
【问题描述】:

我希望这个问题不是重复的 - 我至少无法通过查看其他类似的问答来解决这个问题。

我正在使用 Django 2.2、Postgresql 9.5 和 Django 模板语言和前端引导程序制作 Web 应用程序。

在 settings.py 我有以下时间设置:

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

在我的一些表单中,我有本地日期时间字段:

date = forms.CharField(required=False, widget=forms.DateTimeInput(
        attrs={
            'type':'datetime-local',
            'class':'form-control',
        }
    ))

在我的 Django 模板中,我呈现如下所示的日期字段:

<input type="datetime-local" id="id_date" class="form-control" value="{{ basic_form.date.value|date:"c"}}">

在加载具有从数据库中检索到的日期值的日期字段的页面时,我收到以下错误。而且我无法在表单日期字段中显示日期:

指定的值“2020-10-28T09:28:00+00:00”不符合要求的格式。格式为“yyyy-MM-ddThh:mm”,后跟可选的“:ss”或“:ss.SSS”。

我还尝试直接从views.py收到的表单变量中“渲染”模板中的日期字段:

{{ basic_form.date }}

...然后我收到相同的警告,但是日期值不包含 T '分隔符':

指定的值“2020-10-28 09:28:00+00:00”不符合要求的格式。格式为“yyyy-MM-ddThh:mm”,后跟可选的“:ss”或“:ss.SSS”。

我不知道如何解释这个警告信息,似乎日期格式正确。

在服务器端我收到一个运行时警告:

RuntimeWarning:DateTimeField Recipe.date 在时区支持处于活动状态时收到了一个简单的日期时间 (2020-10-28 09:28:00)。

有谁知道如何获取日期字段中显示的日期以及javascript在应用程序中进一步使用的日期值?任何帮助深表感谢。谢谢!

【问题讨论】:

    标签: html django postgresql datetime


    【解决方案1】:

    剥离 tzinfo 并不是制作幼稚日期时间的正确方法。当您当前的时区为UTC 时,它可以工作,就像现在一样,但否则会中断。而是使用 Django 的make_naive(),它会先正确地将时间转换为本地时区。

    date = make_naive(date)
    

    或者,只需将其保留为可感知的日期时间(Django 的模板引擎会自动将其转换为本地时间),并且只需 specify 显式地使用正确的字符串格式(类似于 value|date(Y-m-d H:i:s))。

    【讨论】:

    • 感谢指正。使用 django.utils.timezone 中的 make_naive() 效果很好。谢谢!
    【解决方案2】:

    我通过删除添加在 datetime.datetime 对象末尾的时区信息 (+00:00) 解决了这个问题。在处理来自数据库查询的数据时,我在 views.py 中添加了这一行:

    date = date.replace(tzinfo=None)
    

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 2014-07-24
      • 2020-11-21
      • 2019-01-11
      • 1970-01-01
      相关资源
      最近更新 更多