繁体   English   中英

python 格式日期时间,带有“st”、“nd”、“rd”、“th”(英文序数后缀),如 PHP 的“S”

[英]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 中没有办法输出stndrdth就像我可以使用带有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM