使用pythons strftime显示日期,如“5月5日”?

时间:2011-05-05 01:00:47

标签: python strftime

  

可能重复:
  Python: Date Ordinal Output?

在Python中,time.strftime可以很容易地产生类似“5月4日星期四”的输出,但是我想生成一个像“星期四5月5日”这样的字符串(注意日期的附加“th”)。这样做的最佳方式是什么?

5 个答案:

答案 0 :(得分:53)

strftime不允许您使用后缀格式化日期。

这是获得正确后缀的方法:

if 4 <= day <= 20 or 24 <= day <= 30:
    suffix = "th"
else:
    suffix = ["st", "nd", "rd"][day % 10 - 1]

found here

更新

将基于Jochen评论的更紧凑的解决方案与gsteff's answer结合使用:

from datetime import datetime as dt

def suffix(d):
    return 'th' if 11<=d<=13 else {1:'st',2:'nd',3:'rd'}.get(d%10, 'th')

def custom_strftime(format, t):
    return t.strftime(format).replace('{S}', str(t.day) + suffix(t.day))

print custom_strftime('%B {S}, %Y', dt.now())

给出:

May 5th, 2011

答案 1 :(得分:14)

这似乎添加了相应的后缀,并删除了天数中丑陋的前导零:

#!/usr/bin/python

import time

day_endings = {
    1: 'st',
    2: 'nd',
    3: 'rd',
    21: 'st',
    22: 'nd',
    23: 'rd',
    31: 'st'
}

def custom_strftime(format, t):
    return time.strftime(format, t).replace('{TH}', str(t[2]) + day_endings.get(t[2], 'th'))

print custom_strftime('%B {TH}, %Y', time.localtime())

答案 2 :(得分:9)

"%s%s"%(day, 'trnshddt'[0xc0006c000000006c>>2*day&3::4])

但严重的是,这是特定于语言环境的,所以你应该在国际化期间这样做

答案 3 :(得分:3)

<击>

<击>
from time import strftime

print strftime('%A %B %dth')

<击>

编辑:

看过大师的答案后纠正:

from time import strftime

def special_strftime(dic = {'01':'st','21':'st','31':'st',
                            '02':'nd','22':'nd',
                            '03':'rd','23':'rd'}):
    x = strftime('%A %B %d')
    return x + dic.get(x[-2:],'th')


print special_strftime()

编辑2

此外:

from time import strftime


def special_strftime(dic = {'1':'st','2':'nd','3':'rd'}):

    x = strftime('%A %B %d')
    return x + ('th' if x[-2:] in ('11','12','13')
                else dic.get(x[-1],'th')

print special_strftime()

编辑3

最后,它可以简化:

from time import strftime

def special_strftime(dic = {'1':'st','2':'nd','3':'rd'}):

    x = strftime('%A %B %d')
    return x + ('th' if x[-2]=='1' else dic.get(x[-1],'th')

print special_strftime()

答案 4 :(得分:1)

你做不到。 time.strftime函数和datetime.datetime.strftime方法(通常)都使用平台C库的strftime函数,它(通常)不提供该格式。您需要使用第三方库,例如dateutil