这是一个曲线球:如何将用户输入(例如,10:30)转换为时间戳?文档说默认输入格式是%H:%M。因此,表单在TimeField上验证。但是,我们都知道10:30是模棱两可的。鉴于Timegield在Postgres中被转换为“时区戳时区”,我们需要构建一个时间戳。
我试图通过以下方式构建时间戳:
event_date = datetime.date(the_year, the_month, the_day) # Naive date
event_time = instance.time # Naive time, datetime.time object
event = datetime.datetime.combine(event_date, event_time) # Naive datetime object
当我尝试将事件保存到Postgres时,它给出了错误:
invalid input syntax for type timestamp with time zone: "10:00:00"
我还试图创建一个时间感知对象:
the_time = pytz.timezone("UTC").localize(instance.time, is_dst = None) # the_time is an aware object
但是,Django提出了一个Exception ValueError:
Django does not support timezone-aware times
然后,我尝试使用timezone:
创建datetime.datetime对象event_aware_datetime = datetime.datetime(the_year, the_month, the_day, instance.time.hour, instance.time.minute, instance.time.second, tzinfo = pytz.utc)
但是,Django提出了熟悉的异常DataError:
invalid input syntax for type timestamp with time zone: "10:00:00"
我已经尝试将datetime.datetime.now()保存为时间,但它确实有效!但是,这不是程序逻辑所要求的。我出于诡计!我只是希望应用程序提供一个时间字段,用户可以在其中指定事件的时间,这很简单!该计划应该照顾其余的,例如从时间和日期创建时间戳,并将其保存在Postgres数据库中。
考虑到我花费了大量时间研究所有模块,日期时间,时间,金字塔,时区等等。我为那些能够揭示Django这个黑暗面的人揭开了我的帽子。