semana - obtener hora sistema python
Python strftime-¿fecha sin liderar 0? (17)
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''
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!
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").
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 :)
Creo 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, D M j, Y'')
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 podría 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 datetime
nuevo estilo, que tiene atributos como t.year
y t.month
y t.day
, y los t.day
formato normal y de alta potencia del operador %
, que admite el control de los principales 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; Tiene muchas opciones de formato para los números también. Consulte: http://docs.python.org/library/string.html#string-formatting .
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)
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)
En Windows, agregue un ''#'', como en ''% # m /% # d /% Y% # I:% M:% S% p''
Para referencia: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
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
.
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()
.
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 alcance 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 expresar 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''
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á incluido en la documentación de Python que encontré
simplemente use replace
así:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
saldrá:
''2017/7/21''
Here 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.
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime(''X%d/X%m/%Y'').replace(''X0'',''X'').replace(''X'','''')
''5/5/2011''