【问题标题】:Add datetime object without timezone添加没有时区的日期时间对象
【发布时间】:2014-11-22 16:58:18
【问题描述】:

我想添加我从用户输入创建的日期时间对象。但我只想在这个模型中添加这个没有时区。我尝试了几种不同的方法,但都没有奏效。

models.py

class troops_command(models.Model):       
    datetime = models.DateTimeField('ki')

我如何创建对象:

    datetime_object = datetime_module.datetime.strptime(datetime_string, format_datetime)
    import pytz
    datetime_object = pytz.timezone("Europe/London").localize(datetime_object, is_dst=None)

之后:

>>> print(datetime_object)
2014-11-22 14:49:00+00:00

但是当我将它添加到数据库时:

Troops_command_model.objects.create(datetime=datetime)

数据库返回:

2014-11-22 15:49:00+01

settings.py

TIME_ZONE = 'Europe/Warsaw'

【问题讨论】:

  • 但是您的datetime_object 确实有一个时区Europe/London。您的意思是您希望它以 UTC 格式存储(即时区偏移量为 0)?它将始终以 UTC 格式存储,并且您可以控制向用户显示的时区。不用担心控制台打印的内容,这取决于数据库,与用户看到的内容无关。
  • 是的,但是伦敦有 +0,所以在 DB 中应该 +0 而不是 +1...我找到了解决方案,请查看我的新帖子。

标签: django


【解决方案1】:

只需创建自定义模型字段 :) 简单易行。

class MytypeField(models.Field):
    def db_type(self, connection):
        return 'timestamp'

class Test(models.Model):
    name = models.CharField(max_length=80)
    something_else = MytypeField()

"timestamp" 是 postgresql 的,mysql 应该是 "datetime"

【讨论】:

    【解决方案2】:

    settings.py

    CONST USE_TZ

    USE_TZ
    默认值:假
    一个布尔值,指定日期时间是否默认时区感知。如果设置为 True,Django 将在内部使用时区感知日期时间。否则,Django 将使用本地时间的原始日期时间。

    django-admin.py startproject 创建的默认 settings.py 文件包含 USE_TZ = True 为方便起见。

    所以,你可以改一下这个设置,多看django settings docs

    更新!

    尝试使用enter link description here。或者尝试使用 pytz 创建自定义字段 -> tutorial

    【讨论】:

    • 是的,但我有其他模型需要时区。
    • @KozakPoprostu 嗯,你需要 1 个没有时区的模式。和其他人在一起?
    • 完全可以。我需要这是日期时间对象。
    • @KozakPoprostu 你明白什么时区不知道 settings.py :)
    • @KozakPoprostu 好的,抱歉洪水泛滥。首先 => 你可以使用这个django-timezone-field。其次 => 与 pytz 一起使用。有些人喜欢这个link。当然第一个解决方案更好=)
    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2018-07-06
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多