python格式datetime与“st”,“nd”,“rd”,“th”(英文序数后缀),如PHP的“S”

时间:2010-09-04 23:42:04

标签: php python django datetime format

我想要输出一个python datetime对象(并在django中使用结果),如下所示:

Thu the 2nd at 4:30

但是我发现在python中输入stndrdth没有办法像我S一样输出PHP日期时间格式string(他们称之为“英语序数后缀”)(http://uk.php.net/manual/en/function.date.php)。

在django / python中有没有内置的方法? strftime不够好(http://docs.python.org/library/datetime.html#strftime-strptime-behavior)。

Django有一个过滤器可以满足我的需求,但我想要一个功能,而不是过滤器,来做我想要的。 django或python函数都可以。

6 个答案:

答案 0 :(得分:25)

django.utils.dateformat有一个函数format,它带有两个参数,第一个是日期(datetime.date [[或datetime.datetime]]个实例,其中{{ 1}}是Python标准库中的模块,第二个是格式字符串,并返回结果格式化的字符串。大写 - datetime格式项(当然,如果是格式字符串的一部分)是扩展为'st','nd','rd'或'th'的正确项目,具体取决于有关日期的某一天。

答案 1 :(得分:13)

不知道内置但我用过这个......

def ord(n):
    return str(n)+("th" if 4<=n%100<=20 else {1:"st",2:"nd",3:"rd"}.get(n%10, "th"))

def dtStylish(dt,f):
    return dt.strftime(f).replace("{th}", ord(dt.day))

答案 2 :(得分:5)

您只需使用人性化库

即可

from django.contrib.humanize.templatetags.humanize import ordinal

然后你可以给任意整数提供序数,即

ordinal(2)将返回2nd

答案 3 :(得分:0)

我刚刚编写了一个小函数来解决自己代码中的相同问题:

def foo(myDate):
    date_suffix = ["th", "st", "nd", "rd"]

    if myDate % 10 in [1, 2, 3] and myDate not in [11, 12, 13]:
        return date_suffix[myDate % 10]
    else:
        return date_suffix[0]

答案 4 :(得分:-1)

以下是更高级的代码:

def date_extention(number):
    if number%10 == 1:
        return '%dst' % number
    if number%10 == 2:
        return '%dnd' % number
    if number%10 == 3:
        return '%drd' % number
    if (number%10 >= 4) or (number%10== 0):
        return '%dth' % number

顺便说一下,这适用于任何数字,所以我建议你制作一个模块。特别是如果你制作了许多用户输入的节目......

答案 5 :(得分:-1)

以下针对上述问题的解决方案:

datetime.strptime(mydate, '%dnd %B %Y')
datetime.strptime(mydate, '%dst %B %Y')
datetime.strptime(mydate, '%dth %B %Y')
datetime.strptime(mydate, '%drd %B %Y')