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]
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.