在Django中从DateTime中去除时间

5 投票
5 回答
9044 浏览
提问于 2025-04-18 04:02

我想从日期时间中去掉时间部分,只保留日期、年份和月份。

"2014-04-17T00:00:00"

我试过不同的方法,但都没成功。

class Inventory(models.Model):
manufacturer = models.CharField(max_length=255)
model        = models.CharField(max_length=255)
description  = models.TextField(max_length=255)
count        = models.IntegerField(max_length= 255, default=1)
location     = models.ForeignKey('Location',  null=True, blank=True)
cover        = models.FileField(upload_to = 'static/images/', default = 'static/images/no-image.png')
created      = models.DateTimeField(auto_now_add=True)
barcode      = models.CharField(max_length=255)
assigned     = models.ForeignKey(User, blank=True, null=True)
checked      = models.BooleanField(default=False)
modified     = models.DateTimeField(default=datetime.datetime.now)
tags         = TaggableManager(through=None, blank=True)

def __unicode__(self):
    return '%s' % date(self.modified, "n/j/Y")

def format_date(obj):
    return obj.modified.strftime('%d %b %Y %H:%M')
    format_date.short_description = 'Modified'

5 个回答

0

如果需要的话,你可以存储时间,否则你可以使用日期字段,具体可以参考这里

不过,如果你在模型中使用了日期时间字段(DateTimeField),想要通过Django的ORM只获取日期,你可以简单地这样做:

获取仅日期:

User.objects.filter('created_at__date')

获取仅月份:

User.objects.filter('created_at__month')

获取仅年份:

User.objects.filter('created_at__year')
0

只需将 modified = models.DateTimeField(default=datetime.datetime.now) 替换为 modified = models.DateField(default=datetime.date.now)

0

这段代码可以解决你的问题:

def get_date(dt):
    """
    Remove the time from datetime field.
    """
    return dt.strftime("%Y-%M-%d")

@property
def modified_date(self):
    return self.get_date(self.modified)

你也可以用 DateField 来代替 DateTimeField。

如果你想了解在 Django 模板标签中如何格式化日期,可以点击这里。

1

你可以使用 dateutil.parser 来解析 strftime 格式的日期:

import dateutil.parser
datetime_date = dateutil.parser.parse(strf_date)

然后你可以根据需要的日期部分来获取 strftime 格式的日期。在你的例子中,就是年、月、日:

date_only = datetime_date.strftime("%Y-%M-%d")
3

这个对我有效。

def get_date(self):
    return self.modified.date()

撰写回答