首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用pythons strftime显示日期,如“5月5日”?

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

Stack Overflow用户
提问于 2011-05-05 09:00:47
回答 4查看 30.3K关注 0票数 34

可能重复:

Python: Date Ordinal Output?

在Python语言中,time.strftime可以很容易地生成像“星期四5月5日”这样的输出,但我想生成一个像“星期四5月5日”这样的字符串(注意日期上额外的"th“)。做这件事最好的方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-05 09:07:01

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

下面是获取正确后缀的方法:

代码语言:javascript
复制
if 4 <= day <= 20 or 24 <= day <= 30:
    suffix = "th"
else:
    suffix = ["st", "nd", "rd"][day % 10 - 1]

更新:

将基于Jochen的注释的更紧凑的解决方案与gsteff's answer相结合

代码语言:javascript
复制
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

票数 88
EN

Stack Overflow用户

发布于 2011-05-05 09:19:15

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

代码语言:javascript
复制
#!/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())
票数 17
EN

Stack Overflow用户

发布于 2011-05-05 10:00:43

代码语言:javascript
复制
"%s%s"%(day, 'trnshddt'[0xc0006c000000006c>>2*day&3::4])

但说真的,这是特定于区域设置的,所以您应该在国际化过程中执行此操作

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5891555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档