Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django/Postgres中存储挂钟日期时间_Django_Postgresql_Timezone - Fatal编程技术网

在Django/Postgres中存储挂钟日期时间

在Django/Postgres中存储挂钟日期时间,django,postgresql,timezone,Django,Postgresql,Timezone,我想为Django中的事件保存一个未来的挂钟datetime。我单独存储了时区字符串 我不能简单地使用DateTimeField,因为它使用时区强制时间戳,并且总是在当前时区中节省时间。它不处理当前日期和实际事件日期之间的DST或可能的时区变化 我可以使用以下任何选项: 选择任何时区来存储时间戳,并在Python中应用实际时区之前始终丢弃此时区。 将时间戳拆分为日期字段和时间字段。 将日期时间存储为字符串。 将日期时间存储为不带时区的时间戳的自定义字段。 但这让查询变得更加困难,而且看起来相当怪

我想为Django中的事件保存一个未来的挂钟datetime。我单独存储了时区字符串

我不能简单地使用DateTimeField,因为它使用时区强制时间戳,并且总是在当前时区中节省时间。它不处理当前日期和实际事件日期之间的DST或可能的时区变化

我可以使用以下任何选项:

选择任何时区来存储时间戳,并在Python中应用实际时区之前始终丢弃此时区。 将时间戳拆分为日期字段和时间字段。 将日期时间存储为字符串。 将日期时间存储为不带时区的时间戳的自定义字段。 但这让查询变得更加困难,而且看起来相当怪异

我错过了更好的选择吗?这个用例似乎很常见,所以我想有更好的方法来做到这一点吗

编辑:我的用例:

假设我的用户想预约2019-12-20 10:00,现在是2019-03-10。我知道该用户的时区,它单独存储为字符串,如“US/Eastern”

如果我假设EST在2019年11月3日开始,我能做的最好的事情就是将时间戳存储到2019-12-20 15:00:00+00:00或2019-12-20 10:00-05:00。我不想要这个,因为:

我不知道我的tzdata是否有未来日期时间的正确信息 即使现在是这样,我也不知道美国/东部时区是否会有任何意外的变化,如果不是我们,情况会变得更糟。无法保证将来DST的更改。 若用户移动到不同的时区,我将不得不重新计算每个单独的约会,同时考虑DST。 如果数据在此重新计算过程中发生更改。。。让我们不要去想那件事。 我更喜欢将未来的日期存储为简单的datetime+时区字符串,如“US/Eastern”,并且几乎从不为超过一周的任何日期构造tz感知的datetime。Django+postgres目前迫使我在时区中使用时间戳,这对于日志和过去的事件非常有用,但它有固定的偏移量,甚至没有时区名称,所以它不适合未来的挂钟日期时间


对于这个用例,假设我不关心不明确的时间:没有多少用户希望在凌晨2:00预订。

我看到了一些可能的解决方案:

设置USE_TZ=False和TIME_ZONE='UTC'并使用日历时间。不会进行任何转换,因此本质上您只是存储日历时间并将其作为原始日期时间返回。主要问题是,此设置是全局设置,对于许多用途(如auto_now)来说不是一个好设置

如上所述,但设置USE_TZ=True。只要您用UTC表示日历时间,就不会有任何异常转换。这里的问题是,你会意识到日期时间,所以你必须注意忽略或删除任何地方的时区

使用单独的日期字段和时间字段。这可能是一个好的解决方案,也可能不是,这取决于您尝试运行的查询类型

创建自己的字段,该字段使用不带时区的时间戳。或许是吧

请注意,这个问题与过去与未来无关。这是关于想要使用固定的时间,而不是日历或挂钟时间。您提出的观点肯定是对使用时间点表示日历时间的有效反对意见