[英]python format datetime with “st”, “nd”, “rd”, “th” (english ordinal suffix) like PHP's “S”
我想要一个 python datetime 对象像这样输出(并在 django 中使用结果):
Thu the 2nd at 4:30
但是我发现在 python 中没有办法输出st
、 nd
、 rd
或th
就像我可以使用带有S
字符串的 PHP 日期时间格式(他们称之为“英文序数后缀”)( 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 函数都可以。
django.utils.dateformat有一个函数format
,它接受两个参数,第一个是日期(一个datetime.date
[[或datetime.datetime
]] 实例,其中datetime
是 Python 标准库中的模块),第二个是作为格式字符串,并返回生成的格式化字符串。 大写的S
格式项(当然,如果是格式字符串的一部分)是根据日期扩展为 'st'、'nd'、'rd' 或 'th' 中的正确项的项相关日期的月份。
不知道内置,但我用过这个......
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))
dtStylish 可以按如下方式调用以获得Thu the 2nd at 4:30
。 使用{th}
放置月份中的日期(“%d” python 格式代码)
dtStylish(datetime(2019, 5, 2, 16, 30), '%a the {th} at %I:%M')
您只需使用humanize 库即可完成此操作
from django.contrib.humanize.templatetags.humanize import ordinal
然后你可以只给出序数任何整数,即
ordinal(2)
将返回2nd
我刚刚编写了一个小函数来解决我自己的代码中的相同问题:
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]
这是更高级的代码:
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
顺便说一下,这适用于任何数字,所以我建议你用它制作一个模块。 特别是如果你制作了很多用户输入的程序......
以下解决方案我得到了上述问题:
datetime.strptime(mydate, '%dnd %B %Y')
datetime.strptime(mydate, '%dst %B %Y')
datetime.strptime(mydate, '%dth %B %Y')
datetime.strptime(mydate, '%drd %B %Y')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.