django Datefield到Unix的时间戳

时间:2009-08-11 09:11:08

标签: python django unix-timestamp

在模型中,我有一个这样的领域: mydate = models.DateField()

现在javascript图形函数需要unix时间戳,例如“1196550000000”,如何返回mydate输入的unix时间戳。

由于

6 个答案:

答案 0 :(得分:101)

我知道前一段时间已经接受了另一个答案,但这个问题在Google的搜索结果中显得很高,所以我将添加另一个答案。

如果您在模板级别工作,则可以使用U parameterdate过滤器,例如:

{{ mydate|date:"U" }}

请注意,它将基于您的settings.py。中的TIMEZONE

答案 1 :(得分:65)

如果你不在模板层,你仍然可以使用相同的底层django工具。例如:

from django.utils.dateformat import format
print format(mymodel.mydatefield, 'U')

答案 2 :(得分:27)

编辑:请检查第二个答案,它有一个更好的解决方案

在python代码中,您可以将日期或日期时间转换为Unix Epoch

import time
epoch = int(time.mktime(mydate.timetuple())*1000)

但这在Django模板中不起作用,因此您需要一个自定义过滤器,例如:

import time

from django import template

register = template.Library()

@register.filter
def epoch(value):
    try:
        return int(time.mktime(value.timetuple())*1000)
    except AttributeError:
        return ''

答案 3 :(得分:6)

views.py中,您可以将mydate的值转换为自Unix时代以来的秒数,如下所示:

seconds = time.mktime(mydate.timetuple())

然后将其作为参数传递给render_to_response()(或用于渲染视图的任何内容),并在模板中将{{seconds}}粘贴到隐藏字段中,然后,您可以退出DOM以传递到您的javascript图形函数。

请注意,DateField映射到Python对象datetime.date,因此,其timetuple将其小时,分钟和秒字段设置为0.如果这不是很好 - 对于您而言,您需要将mydate更改为DateTimeField并且它将是datetime.datetime。如果你这样做,你仍然可以使用mydate.timetuple()

另外,我假设你正在使用当地时间。如果您使用UTC时间,则需要calendar.gmtime()而不是time.mktime()mydate.utctimetuple()而不是mydate.timetuple(),但utctimetuple()只是datetime.datetime的有效方法1}}对象。有关更多详细信息,请参阅datetime文档(还有timecalendar)。

编辑:fiddly详细信息,例如mktime()返回一个浮点数的事实,piquadrat记得,而我没有。自定义过滤器方法也很好。投票一个。

答案 4 :(得分:1)

另一种选择:

import time
from django.utils import timezone

naive_date = timezone.make_naive(mydate, timezone.get_current_timezone())
print int(time.mktime(naive_date.timetuple()))

答案 5 :(得分:0)

我在答案中找不到的非常简单的方法

import time
timestamp = int(time.time())