python - from - ¿Cómo imprimir una fecha en un formato regular?
strftime python (21)
Este es mi código:
import datetime
today = datetime.date.today()
print today
Esto imprime: 2008-11-22, que es exactamente lo que quiero PERO ... Tengo una lista a la que le estoy adjuntando y de repente todo va "malicioso". Aquí está el código:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist
Esto imprime lo siguiente:
[datetime.date(2008, 11, 22)]
¿Cómo demonios puedo obtener solo una fecha simple como "2008-11-22"?
El POR QUÉ: las fechas son objetos
En Python, las fechas son objetos. Por lo tanto, cuando los manipulas, manipulas objetos, no cadenas, ni marcas de tiempo ni nada.
Cualquier objeto en Python tiene DOS representaciones de cadena:
La representación regular utilizada por "imprimir" se puede obtener utilizando la función
str()
. Es la mayor parte del tiempo el formato legible por humanos más común y se usa para facilitar la visualización. Así questr(datetime.datetime(2008, 11, 22, 19, 53, 42))
le da''2008-11-22 19:53:42''
.La representación alternativa que se utiliza para representar la naturaleza del objeto (como datos). Se puede obtener utilizando la función
repr()
y es útil para saber qué tipo de datos está manipulando mientras desarrolla o depura.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
le ofrece''datetime.datetime(2008, 11, 22, 19, 53, 42)''
.
Lo que sucedió es que cuando imprimiste la fecha usando "imprimir", usó str()
para que pudieras ver una buena cadena de fecha. Pero cuando mylist
, mylist
una lista de objetos y Python intentó representar el conjunto de datos utilizando repr()
.
El cómo: ¿qué quieres hacer con eso?
Bueno, cuando manipules fechas, sigue usando los objetos de fecha durante todo el camino. Obtuvieron miles de métodos útiles y la mayoría de las API de Python esperan que las fechas sean objetos.
Cuando quieras mostrarlos, solo usa str()
. En Python, la buena práctica es lanzar explícitamente todo. Entonces, cuando llegue el momento de imprimir, obtenga una representación en cadena de su fecha usando str(date)
.
Una última cosa. Cuando intentaste imprimir las fechas, mylist
. Si desea imprimir una fecha, debe imprimir los objetos de fecha, no su contenedor (la lista).
Por ejemplo, desea imprimir toda la fecha en una lista:
for date in mylist :
print str(date)
Tenga en cuenta que en ese caso específico , incluso puede omitir str()
porque print lo usará por usted. Pero no debería convertirse en un hábito :-)
Caso práctico, utilizando su código.
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It''s better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate ''str'' and ''datetime.date'' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Formato de fecha avanzado
Las fechas tienen una representación predeterminada, pero es posible que desee imprimirlas en un formato específico. En ese caso, puede obtener una representación de cadena personalizada utilizando el método strftime()
.
strftime()
espera un patrón de cadena que explica cómo desea formatear su fecha.
P.EJ :
print today.strftime(''We are the %d, %b %Y'')
>>> ''We are the 22, Nov 2008''
Todas las letras después de un "%"
representan un formato para algo:
-
%d
es el número del día -
%m
es el número del mes -
%b
es la abreviatura del mes -
%y
son los últimos dos dígitos del año -
%Y
es todo el año
etc
Eche un vistazo a la documentación oficial , oa la referencia rápida de McCutchen, no puede conocerlos todos.
Desde PEP3101 , cada objeto puede tener su propio formato utilizado automáticamente por el formato de método de cualquier cadena. En el caso de datetime, el formato es el mismo que se usa en tiempo de ejecución. Así que puedes hacer lo mismo que arriba de esta manera:
print "We are the {:%d, %b %Y}".format(today)
>>> ''We are the 22, Nov 2008''
La ventaja de este formulario es que también puede convertir otros objetos al mismo tiempo.
Con la introducción de literales de cadena con formato (desde Python 3.6, 2016-12-23), esto se puede escribir como
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> ''2017-06-15''
Localización
Las fechas se pueden adaptar automáticamente a la lengua y cultura locales si las usa de la manera correcta, pero es un poco complicado. Tal vez para otra pregunta sobre SO () ;-)
¿Es posible que desee agregarlo como una cadena?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print mylist
Aquí es cómo mostrar la fecha como (año / mes / día):
from datetime import datetime
now = datetime.now()
print ''%s/%s/%s'' % (now.year, now.month, now.day)
Como la print today
devuelve lo que desea, esto significa que la función __str__
del objeto today devuelve la cadena que está buscando.
Así que también puedes hacer mylist.append(today.__str__())
.
Con el formato de cadena de datetime
y datetime
específico del tipo (consulte la respuesta de str.format()
con str.format()
.) En un literal de cadena con formato (desde Python 3.6, 2016-12-23):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
''2017-06-15''
Las directivas de formato de fecha / hora no se documentan como parte de la sintaxis de cadena de formato, sino en la documentación de date
, datetime
y time
strftime()
. Se basan en el estándar C de 1989, pero incluyen algunas directivas ISO 8601 desde Python 3.6.
Es necesario convertir el objeto de fecha y hora en una cadena.
El siguiente código funcionó para mí:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection
Déjame saber si necesitas más ayuda.
Esto es más corto:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
''2013-11-19 09:38''
Los objetos date, datetime y time son compatibles con un método strftime (formato), para crear una cadena que representa la hora bajo el control de una cadena de formato explícito.
Aquí hay una lista de los códigos de formato con su directiva y significado.
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%f Microsecond as a decimal number [0,999999], zero-padded on the left
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM.
%S Second as a decimal number [00,61].
%U Week number of the year (Sunday as the first day of the week)
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week)
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%z UTC offset in the form +HHMM or -HHMM.
%Z Time zone name (empty string if the object is naive).
%% A literal ''%'' character.
Esto es lo que podemos hacer con los módulos datetime y time en Python
import time
import datetime
print "Time in seconds since the epoch: %s" %time.time()
print "Current date and time: " , datetime.datetime.now()
print "Or like this: " ,datetime.datetime.now().strftime("%y-%m-%d-%H-%M")
print "Current year: ", datetime.date.today().strftime("%Y")
print "Month of year: ", datetime.date.today().strftime("%B")
print "Week number of the year: ", datetime.date.today().strftime("%W")
print "Weekday of the week: ", datetime.date.today().strftime("%w")
print "Day of year: ", datetime.date.today().strftime("%j")
print "Day of the month : ", datetime.date.today().strftime("%d")
print "Day of week: ", datetime.date.today().strftime("%A")
Eso imprimirá algo como esto:
Time in seconds since the epoch: 1349271346.46
Current date and time: 2012-10-03 15:35:46.461491
Or like this: 12-10-03-15-35
Current year: 2012
Month of year: October
Week number of the year: 40
Weekday of the week: 3
Day of year: 277
Day of the month : 03
Day of week: Wednesday
No entiendo completamente, pero puedo usar pandas
para obtener horarios en el formato correcto:
>>> import pandas as pd
>>> pd.to_datetime(''now'')
Timestamp(''2018-10-07 06:03:30'')
>>> print(pd.to_datetime(''now''))
2018-10-07 06:03:47
>>> pd.to_datetime(''now'').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime(''now'').date())
2018-10-07
>>>
Y:
>>> l=[]
>>> l.append(pd.to_datetime(''now'').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
[''2018-10-07'']
Pero es almacenar cadenas pero fácil de convertir:
>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp(''2018-10-07 00:00:00'')]
O incluso
from datetime import datetime, date
"{:%d.%m.%Y}".format(datetime.now())
Fuera: ''25 .12.2013
o
"{} - {:%d.%m.%Y}".format("Today", datetime.now())
Fuera: ''Hoy - 25.12.2013''
"{:%A}".format(date.today())
Fuera: ''miércoles''
''{}__{:%Y.%m.%d__%H-%M}.log''.format(__name__, datetime.now())
Fuera: ''__main ____ 2014.06.09__16-56.log''
Odio la idea de importar demasiados módulos por conveniencia. Preferiría trabajar con el módulo disponible, que en este caso es datetime
lugar de llamar a una nueva time
módulo.
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime(''%Y-%m-%d %H:%M'')
''2015-04-01 11:23''
Puedes usar easy_date para hacerlo más fácil:
import date_converter
my_date = date_converter.date_to_string(today, ''%Y-%m-%d'')
Respuesta simple -
datetime.date.today().isoformat()
Teniendo en cuenta el hecho de que pidió algo simple para hacer lo que quería, podría simplemente:
import datetime
str(datetime.date.today())
Tu puedes hacer:
mylist.append(str(today))
Un descargo de responsabilidad rápido para mi respuesta: solo he estado aprendiendo Python durante aproximadamente 2 semanas, por lo que no soy un experto; por lo tanto, mi explicación puede no ser la mejor y puedo usar una terminología incorrecta. De todos modos, aquí va.
Noté en su código que cuando declaró su variable today = datetime.date.today()
eligió nombrar su variable con el nombre de una función incorporada.
Cuando su siguiente línea de código mylist.append(today)
anexó su lista, anexó la cadena completa datetime.date.today()
, que había establecido previamente como el valor de su variable today
, en lugar de simplemente anexar today()
.
Una solución simple, aunque tal vez no la mayoría de los codificadores usarían al trabajar con el módulo datetime, es cambiar el nombre de su variable.
Esto es lo que intenté:
import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present
y se imprime yyyy-mm-dd
.
Utilice date.strftime. Los argumentos de formato se describen en la documentación .
Este es lo que querías:
some_date.strftime(''%Y-%m-%d'')
Éste tiene en cuenta Locale. (hacer esto)
some_date.strftime(''%c'')
# convert date time to regular format.
d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
SALIDA
2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
from datetime import date
def time-format():
return str(date.today())
print (time-format())
esto se imprimirá 6-23-2018 si eso es lo que quieres :)
import datetime
import time
months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {''01'': ''Jan'', ''02'':''Feb'',''03'':''Mar'',''04'':''Apr'',''05'':''May'',''06'': ''Jun'',''07'':''Jul'',''08'':''Aug'',''09'':''Sep'',''10'':''Oct'',''11'':''Nov'',''12'':''Dec''}
result = choices.get(month, ''default'')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date
De esta manera puede obtener la fecha con formato como este ejemplo: 22-Jun-2017
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
Editar:
Después de la sugerencia de Cees, también comencé a usar el tiempo:
import time
print time.strftime("%Y-%m-%d %H:%M")