Strthime de Python – ¿fecha sin liderar 0?

Cuando se utiliza el tiempo de actividad de Python, ¿hay una manera de eliminar el primer 0 de la fecha si es anterior al 10, es decir. entonces 01 es 1 ? ¿No puedes encontrar un % thingy para eso?

¡Gracias!

En realidad tuve el mismo problema y me di cuenta de que, si agrega un guión entre el % y la letra, puede eliminar el cero inicial.

Por ejemplo, %Y/%-m/%-d .

Esto solo funciona en Unix (Linux, OS X), no en Windows (incluido Cygwin). En Windows, usaría # , por ejemplo, %Y/%#m/%#d .

Podemos hacer este tipo de cosas con la llegada del método de format desde python2.6:

 >>> import datetime >>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now()) '2013/4/19' 

Aunque quizás más allá del scope de la pregunta original, para formatos más interesantes, puedes hacer cosas como:

 >>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now()) 'Wednesday December 3, 2014' 

Y a partir de python3.6, esto se puede express como una cadena formateada en línea :

 Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import datetime >>> dt = datetime.datetime.now() >>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}' 'Monday August 29, 2016' 

Algunas plataformas pueden admitir la especificación de ancho y precisión entre % y la letra (como ‘d’ para el día del mes), de acuerdo con http://docs.python.org/library/time.html , pero definitivamente es un no solución portátil (por ejemplo, no funciona en mi Mac ;-). ¿Tal vez puede usar una cadena de reemplazo (o RE, para un formato realmente desagradable) después del tiempo de strftime para remediar eso? p.ej:

 >>> y (2009, 5, 7, 17, 17, 17, 3, 127, 1) >>> time.strftime('%Y %m %d', y) '2009 05 07' >>> time.strftime('%Y %m %d', y).replace(' 0', ' ') '2009 5 7' 
 >>> import datetime >>> d = datetime.datetime.now() >>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','') '5/5/2011' 

Aquí está la documentación de los modificadores soportados por strftime() en la biblioteca GNU C. (Como la gente dijo antes, podría no ser portátil). De interés para usted podría ser:

  • %e lugar de %d reemplazará el cero inicial en el día del mes con un espacio

Funciona en mi Python (en Linux). No sé si funcionará en el tuyo.

Bastante tarde para la fiesta, pero %-d funciona en mi final.

datetime.now().strftime('%B %-d, %Y') produce algo así como “5 de noviembre de 2014”

saludos 🙂

En Windows, agregue un ‘#’, como en ‘% # m /% # d /% Y% # I:% M:% S% p’

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

Me parece que el filtro de formato de fecha de la plantilla de Django es rápido y fácil. Se quita los ceros iniciales. Si no te importa importar el módulo Django, échale un vistazo.

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

 from django.template.defaultfilters import date as django_date_filter print django_date_filter(mydate, 'P, DM j, Y') 

Echa un vistazo a - abajo

 >>> from datetime import datetime >>> datetime.now().strftime('%d-%b-%Y') >>> '08-Oct-2011' >>> datetime.now().strftime('%-d-%b-%Y') >>> '8-Oct-2011' >>> today = datetime.date.today() >>> today.strftime('%d-%b-%Y') >>> print(today) 

simplemente use replace así:

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

saldrá:

 '2017/7/21' 

Para %d puede convertir a entero usando int() entonces eliminará automáticamente el 0 inicial y se convertirá en entero. A continuación, puede convertir de nuevo a cadena utilizando str() .

Basado en el método de Alex, esto funcionará tanto para los casos de inicio de cadena como de espacios posteriores al espacio:

 re.sub('^0|(?<= )0', '', "01 January 2000 08:00am") 

Me gusta esto mejor que .format o% -d porque es multiplataforma y me permite seguir usando strftime (para obtener cosas como "Noviembre" y "Lunes").

Debido a que Python simplemente llama a la función strftime(3) lenguaje C en su plataforma, puede ser que haya caracteres de formato que pueda usar para controlar el cero inicial; intente man strftime y eche un vistazo. Pero, por supuesto, el resultado no será portátil, como le recordará el manual de Python. 🙂

Intentaría usar un objeto de datetime y datetime nuevo estilo, que tiene atributos como t.year y t.month y t.day , y ponerlos a través del formato normal y de alta potencia del operador % , que admite el control de los líderes. ceros Consulte http://docs.python.org/library/datetime.html para obtener más información. Mejor aún, use el operador "".format() si su Python lo tiene y sea aún más moderno; También tiene muchas opciones de formato para los números. Consulte: http://docs.python.org/library/string.html#string-formatting .

Pregunta antigua, pero% l (L minúscula) funcionó para mí en tiempo de respuesta: puede que esto no funcione para todos, ya que no está en la documentación de Python que encontré

 import datetime now = datetime.datetime.now() print now.strftime("%b %_d") 

El uso de, por ejemplo, “% -d” no es portátil incluso entre diferentes versiones del mismo sistema operativo. Una mejor solución sería extraer los componentes de fecha individualmente y elegir entre operadores de formato específicos de fecha y acceso de atributo de fecha para cada componente.

 e = datetime.date(2014, 1, 6) "{date:%A} {date.day} {date:%B}{date.year}".format(date=e) 

%d admite ambos (cero inicial y sin él) en Python 3.6.5 (y con suerte en las versiones posteriores)

introduzca la descripción de la imagen aquí