poner formato fecha como actual python datetime formatting zero-pad

como - formato fecha python



Formateo de fecha y hora de Python sin relleno cero (5)

Buena respuesta de Chris Freeman en Linux.

En Windows, es:

mydate.strftime(''%#m/%#d/%Y'')

Pensamiento que podría ayudar.

¿Hay un formato para imprimir las fechas de Python que no usará relleno cero en fechas y horas?

Formato que estoy usando ahora:

mydatetime.strftime(''%m/%d/%Y %I:%M%p'')

Resultado: 29/02/2012 05:03 PM
Deseado: 2/29/2012 5:03 PM

¿Qué formato representaría el mes como ''2'' en lugar de ''02'', y el tiempo como ''5:03 PM'' en lugar de ''05: 03PM ''?


El nuevo sistema de formato de cadenas proporciona una alternativa al tiempo de strftime . Es bastante legible; de ​​hecho, podría ser preferible strftime en esa cuenta. Sin mencionar el hecho de que no tiene cero almohadilla:

>>> ''{d.month}/{d.day}/{d.year}''.format(d=datetime.datetime.now()) ''3/1/2012''

Dado que probablemente desee relleno cero en el campo de minutos, puede hacer esto:

>>> ''{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}''.format(d=now) ''3/1/2012 20:00''

Si desea tiempo "normal" en lugar de "militar", también puede usar los especificadores de strftime estándar. Convenientemente, para nuestros propósitos, strftime proporciona un código para el tiempo de 12 horas rellenado con un espacio en blanco en lugar de un cero strftime :

''{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}''.format(d=now) ''4/4/2014 6:00PM''

Esto se vuelve algo menos legible, ¡ay! Y como señala @mlissner, strftime fallará en algunas (¿todas?) Plataformas para fechas anteriores a 1900.


La otra alternativa para evitar el anterior cero de "todo o ninguno" es colocar un signo menos delante del tipo de campo:

mydatetime.strftime(''%-m/%d/%Y %-I:%M%p'')

Luego esto: ''10/04/2015 03:00 AM''

Se convierte en: ''10/04/2015 3:00 a.m.''

Opcionalmente puede colocar un signo menos al frente del día si lo desea.


Las opciones de formato disponibles con datetime.strftime() serán cero. Por supuesto, podría ejecutar su propia función de formateo, pero la solución más fácil en este caso podría ser postprocesar el resultado de datetime.strftime() :

s = mydatetime.strftime(''%m/%d/%Y %I:%M%p'').lstrip("0").replace(" 0", " ")

(Es decir, si decides que hacerlo realmente vale la pena. ¿Por qué no simplemente dejas los ceros?)


Respuesta aceptada no es una solución adecuada (en mi humilde opinión) Los métodos documentados adecuados:

En Linux, "#" se reemplaza por "-":

% -d,% -H,% -I,% -j,% -m,% -M,% -S,% -U,% -w,% -W,% -y,% -Y

En Windows "-" se reemplaza por "#":

% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y

#Linux mydatetime.strftime(''%-m/%d/%Y %-I:%M%p'') # Windows mydatetime.strftime(''%#m/%d/%Y %#I:%M%p'')

Fuente: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

Como afirma Sagneta: El truco # hash en Windows solo está disponible para el ejecutable nativo de python. esto no funcionará para las implementaciones de python basadas en cygwin.