我想要输出一个python datetime对象(并在django中使用结果),如下所示:
Thu the 2nd at 4:30
但是我发现在python中输入st
,nd
,rd
或th
没有办法像我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函数都可以。
答案 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')