¿Existe un formato para imprimir las fechas y horas de Python que no utilice relleno de ceros 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 : 29/02/2012 5:03 PM
¿Qué formato representaría el mes como '2' en lugar de '02' y la hora como '5:03 p.m.' en lugar de '05: 03 p.m. '?
python
datetime
formatting
zero-pad
Yarin
fuente
fuente
.lstrip("0")
elimina el cero a la izquierda .La otra alternativa para evitar el aspecto de cero a la izquierda "todo o nada" es colocar un signo menos delante del tipo de campo:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Entonces esto: '4/10/2015 03:00 AM'
Se convierte en: '4/10/2015 3:00 AM'
Opcionalmente, puede colocar un signo menos al frente del día si lo desea.
Editar: La característica menos deriva de la biblioteca GNU C ("glibc") como se menciona en la página de manual de Linux strftime en "Notas de Glibc"
fuente
date.__format__
otime.strftime
, docs.python.org/3/library/… y docs.python.org/3.8/library/time.html#time.strftime respectivamenteEl nuevo sistema de formato de cadenas ofrece una alternativa a
strftime
. Es bastante legible; de hecho, podría ser preferiblestrftime
por ese motivo. Sin mencionar el hecho de que no hace pad cero:>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now()) '3/1/2012'
Dado que probablemente desee un relleno de cero en el campo de los 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 un tiempo "regular" en lugar de un tiempo "militar", también puede utilizar los
strftime
especificadores estándar . Convenientemente, para nuestros propósitos,strftime
hace proporcionar un código para el acolchado de 12 horas con un espacio en blanco en lugar de un cero a la izquierda:'{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, por desgracia. Y como señala @mlissner,
strftime
fallará en algunas (¿todas?) Plataformas para fechas anteriores a 1900.fuente
"{0.day} {0:%B %Y}".format(d)
que le daría'2 August 2013'
como el día de este comentario :)La 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 dijo Sagneta: El truco # hash en Windows solo está disponible para el ejecutable nativo de Python. esto no funcionará para implementaciones de python basadas en cygwin.
fuente
Buena respuesta de Chris Freeman en Linux.
En Windows, es:
mydate.strftime('%#m/%#d/%Y')
Pensé que eso podría ayudar.
fuente
"% l" (que es una L minúscula) funciona para la hora (en lugar de "% I"). Solo sé esto por otra respuesta aquí.
Python strftime - ¿fecha sin 0 a la izquierda?
pero desafortunadamente no tienen el código para los otros elementos de una fecha / hora.
fuente