Django-如何手动设置给定日期和时间的DateTimeField值?

时间:2018-07-29 12:57:13

标签: python django datetime django-queryset

如何给定日期和时间手动设置DateTimeField值?

这是我的模型,我正在尝试将日期和时间值分配给“ created_at”字段:

class Attendance(models.Model):
    employee = models.ForeignKey(Employee)
    company = models.ForeignKey(Company)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
​
    def __str__(self):
        return self.employee.username
​

这是我在控制台中尝试过的东西:

> o = Attendance.objects.last()
> o.updated_at
datetime.datetime(2018, 6, 26, 0, 45, 31, 829827, tzinfo=<UTC>)
> x = datetime.strptime('17/07/2018 12:20', '%d/%m/%Y %H:%M')
> x
datetime.datetime(2018, 7, 17, 12, 20)
>o.updated_at = x
o.save()
>z = Attendance.objects.last()
>z.updated_at
datetime.datetime(2018, 7, 29, 12, 0, 13, 204815, tzinfo=<UTC>)

注意,我设置为“ 2018、7、17”,但显示为“ 2018、7、29”。作业正确吗?可能还需要时区。

2 个答案:

答案 0 :(得分:0)

因此,如果您要执行的操作是将updated_at字段设置为当前的Asia / Kuala_Lumpur时区,则要生成datetime.datetime(2018、7、29、12、0、13、204815,tzinfo =)和适当的tzinfo值。

这是以下两个堆栈溢出答案的组合:

Python strptime() and timezones?

Is there a list of Pytz Timezones?

您产生的呼叫将引用

Asia/Kuala_Lumpur

呼叫可能看起来像:

x = datetime.tzinfo("Asia/Kuala_Lumpur")
y = datetime.datetime(2018, 7, 29, 12, 0, 13, 204815, x)

答案 1 :(得分:0)

如果datetimesUSE_TZ

Truealways be stored in UTC

唯一的解决方法是将USE_TZ设置为Falseauto_now uses django.utils.timezone.now(),其中is defined to do以下:

  

如果USE_TZFalse,则这将是一个简单的日期时间(即没有相关时区的日期时间),代表系统本地时区中的当前时间。   

转换时间并将其存储在数据库中不是一个好方法,因此,可以在需要时转换时间