libreria example create python strftime

example - Muestra la fecha, como "5 de mayo", usando pythons strftime?



timedelta python example (5)

Posible duplicado:
Python: Fecha de salida ordinal?

En Python time.strftime puede producir resultados como "jueves 05 de mayo" con bastante facilidad, pero me gustaría generar una cadena como "jueves 5 de mayo" (observe la "th" adicional en la fecha) ¿Cuál es la mejor manera de hacer esto?


Esto parece agregar el sufijo apropiado y eliminar los ceros iniciales feos en el número del día:

#!/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())


No se puede. La función time.strftime y el método datetime.datetime.strftime (generalmente) usan la función strftime la biblioteca de la plataforma C y (generalmente) no ofrece ese formato. Necesitaría utilizar una biblioteca de terceros, como dateutil .


strftime no le permite formatear una fecha con un sufijo.

Aquí hay una manera de obtener el sufijo correcto:

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

encontrado aquí

Actualizar:

Combinando una solución más compacta basada en el comentario de Jochen con la respuesta de gsteff :

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())

Da:

May 5th, 2011


from time import strftime print strftime(''%A %B %dth'')

EDITAR:

Corrigiendo después de haber visto las respuestas de los gurús:

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()

.

Editar 2

También:

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()

.

EDITAR 3

Finalmente, se puede simplificar:

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()


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

Pero en serio, este es un lugar específico, por lo que debería hacerlo durante la internacionalización.