Cómo formatear fechas en Python

Python viene con una variedad de objetos útiles que se pueden usar de inmediato. Los objetos de fecha son ejemplos de tales objetos. Los tipos de fecha son difíciles de manipular...

Introducción

Python viene con una variedad de objetos útiles que se pueden usar de inmediato. Los objetos de fecha son ejemplos de tales objetos. Los tipos de fecha son difíciles de manipular desde cero, debido a la complejidad de las fechas y las horas. Sin embargo, los objetos de fecha de Python hacen que sea extremadamente fácil convertir fechas en los formatos de cadena deseables.

El formateo de fechas es una de las tareas más importantes a las que se enfrentará como programador. Diferentes regiones alrededor del mundo tienen diferentes formas de representar fechas/horas, por lo tanto, su objetivo como programador es presentar los valores de fecha de una manera que sea legible para los usuarios.

Por ejemplo, es posible que deba representar un valor de fecha numéricamente como "23-02-2018". Por otro lado, es posible que deba escribir el mismo valor de fecha en un formato de texto más largo como "23 de febrero de 2018". En otro escenario, es posible que desee extraer el mes en formato de cadena de un valor de fecha con formato numérico.

En este artículo, estudiaremos diferentes tipos de objetos de fecha junto con sus funcionalidades.

El módulo de fecha y hora

El módulo datetime de Python, como probablemente habrá adivinado, contiene métodos que se pueden usar para trabajar con valores de fecha y hora. Para usar este módulo, primero lo importamos a través de la instrucción import de la siguiente manera:

1
import datetime

Podemos representar valores de tiempo usando la clase time. Los atributos para la clase time incluyen la hora, el minuto, el segundo y el microsegundo.

Los argumentos para la clase time son opcionales. Aunque si no especifica ningún argumento, obtendrá un tiempo de 0, que es poco probable que sea lo que necesita la mayor parte del tiempo.

Por ejemplo, para inicializar un objeto de tiempo con un valor de 1 hora, 10 minutos, 20 segundos y 13 microsegundos, podemos ejecutar el siguiente comando:

1
t = datetime.time(1, 10, 20, 13)

Para ver la hora, usemos la función imprimir:

1
print(t)

Producción:

1
01:10:20.000013

Es posible que necesite ver solo la hora, el minuto, el segundo o el microsegundo, así es como puede hacerlo:

1
print('hour:', t.hour)

Producción:

1
hour: 1

Los minutos, segundos y microsegundos del tiempo anterior se pueden recuperar de la siguiente manera:

1
2
3
print('Minutes:', t.minute)
print('Seconds:', t.second)
print('Microsecond:', t.microsecond)

Producción:

1
2
3
Minutes: 10
Seconds: 20
Microseconds: 13

Los valores para la fecha del calendario se pueden representar a través de la clase fecha. Las instancias tendrán atributos para año, mes y día.

Llamemos al método hoy para ver la fecha de hoy:

1
2
3
4
import datetime

today = datetime.date.today()
print(today)

Producción:

1
2018-09-15

El código devolverá la fecha de hoy, por lo tanto, el resultado que vea dependerá del día en que ejecute el script anterior.

Ahora llamemos al método ctime para imprimir la fecha en otro formato:

1
print('ctime:', today.ctime())

Producción:

1
ctime: Sat Sep 15 00:00:00 2018

El método ctime usa un formato de fecha y hora más largo que los ejemplos que vimos antes. Este método se utiliza principalmente para convertir el tiempo de Unix (la cantidad de segundos desde el 1 de enero de 1970) a un formato de cadena.

Y así es como podemos mostrar el año, el mes y el día usando la clase fecha:

1
2
3
print('Year:', today.year)
print('Month:', today.month)
print('Day :', today.day)

Producción

1
2
3
Year: 2018
Month: 9
Day : 15

Conversión de fechas en cadenas con strftime

Ahora que sabe cómo crear objetos de fecha y hora, aprendamos cómo formatearlos en cadenas más legibles.

Para lograr esto, utilizaremos el método strftime. Este método nos ayuda a convertir objetos de fecha en cadenas legibles. Toma dos parámetros, como se muestra en la siguiente sintaxis:

1
time.strftime(format, t)

El primer parámetro es la cadena de formato, mientras que el segundo parámetro es el tiempo de formato, que es opcional.

Este método también se puede usar en un objeto datetime directamente, como se muestra en el siguiente ejemplo:

1
2
3
4
5
import datetime

x = datetime.datetime(2018, 9, 15)

print(x.strftime("%b %d %Y %H:%M:%S"))

Producción:

1
Sep 15 2018 00:00:00

Hemos utilizado las siguientes cadenas de caracteres para formatear la fecha:

  • %b: Devuelve los tres primeros caracteres del nombre del mes. En nuestro ejemplo, devolvió "Sep"
  • %d: Devuelve el día del mes, del 1 al 31. En nuestro ejemplo, devolvió "15".
  • %Y: Devuelve el año en formato de cuatro dígitos. En nuestro ejemplo, devolvió "2018".
  • %H: Devuelve la hora. En nuestro ejemplo, devolvió "00".
  • %M: Devuelve el minuto, de 00 a 59. En nuestro ejemplo, devolvió "00".
  • %S: Devuelve el segundo, de 00 a 59. En nuestro ejemplo, devolvió "00".

No pasamos un tiempo, por lo que los valores de tiempo son todos "00". El siguiente ejemplo muestra cómo también se puede formatear la hora:

1
2
3
4
5
import datetime

x = datetime.datetime(2018, 9, 15, 12, 45, 35)

print(x.strftime("%b %d %Y %H:%M:%S"))

Producción:

1
Sep 15 2018 12:45:35

La lista completa de códigos de caracteres

Además de las cadenas de caracteres dadas anteriormente, el método strftime toma otras directivas para formatear valores de fecha:

  • %a: Devuelve los tres primeros caracteres del día de la semana, p. Casarse.
  • %A: Devuelve el nombre completo del día de la semana, p. Miércoles.
  • %B: Devuelve el nombre completo del mes, p. Septiembre.
  • %w: Devuelve el día de la semana como un número, de 0 a 6, siendo el domingo 0.
  • %m: Devuelve el mes en forma de número, del 01 al 12.
  • %p: Devuelve AM/PM para la hora.
  • %y: Devuelve el año en formato de dos dígitos, es decir, sin el siglo. Por ejemplo, "18" en lugar de "2018".
  • %f: Devuelve microsegundos de 000000 a 999999.
  • %Z: Devuelve la zona horaria.
  • %z: Devuelve el desplazamiento UTC.
  • %j: Devuelve el número del día del año, del 001 al 366.
  • %W: Devuelve el número de semana del año, de 00 a 53, contando el lunes como el primer día de la semana.
  • %U: Devuelve el número de semana del año, de 00 a 53, contando el domingo como el primer día de cada semana.
  • %c: Devuelve la versión de fecha y hora local.
  • %x: Devuelve la versión local de la fecha.
  • %X: Devuelve la versión local de la hora.

Considere el siguiente ejemplo:

1
2
3
4
5
import datetime

x = datetime.datetime(2018, 9, 15)

print(x.strftime('%b/%d/%Y'))

Producción:

1
Sep/15/2018

Y así es como puede obtener solo el mes:

1
print(x.strftime('%B'))

Producción:

1
September

Mostremos el año:

1
print(x.strftime('%Y'))

Producción:

1
2018

En este ejemplo hemos utilizado el código de formato %Y. Observe que la Y está en mayúsculas. Ahora escríbelo en minúsculas:

1
print(x.strftime('%y'))

Producción:

1
18

Esta vez, se ha omitido el siglo. Como puede ver, con estos códigos de formato puede representar la fecha y la hora en casi cualquier forma que desee.

Convertir cadenas en fechas con strptime

El método strftime nos ayudó a convertir objetos de fecha en cadenas más legibles. El método strptime hace lo contrario, es decir, toma cadenas y las convierte en objetos de fecha que Python puede entender.

Esta es la sintaxis del método:

1
datetime.strptime(string, format)

El parámetro string es el valor en formato de cadena que queremos convertir a formato de fecha. El parámetro formato es la directiva que especifica el formato que se tomará en la fecha posterior a la conversión.

Por ejemplo, digamos que necesitamos convertir la cadena "9/15/18" en un objeto datetime.

Importemos primero el módulo datetime. Usaremos la palabra clave from para poder hacer referencia a las funciones específicas del módulo sin el formato de punto:

1
from datetime import datetime

Entonces podemos definir la fecha en forma de cadena:

1
str = '9/15/18'

Python no podrá entender la cadena anterior como una fecha y hora hasta que la convertimos en un objeto fecha y hora real. Podemos hacerlo con éxito llamando al método strptime.

Ejecute el siguiente comando para convertir la cadena:

1
date_object = datetime.strptime(str, '%m/%d/%y')

Llamemos ahora a la función imprimir para mostrar la cadena en formato fechahora:

1
print(date_object)

Producción:

1
2018-09-15 00:00:00

Como puede ver, ¡la conversión fue exitosa!

Puede ver que se ha utilizado la barra inclinada "/" para separar los diversos elementos de la cadena. Esto le dice al método strptime en qué formato está nuestra fecha, que en nuestro caso "/" se usa como separador.

Pero, ¿y si el día/mes/año estuviera separado por "-"? Así es como manejarías eso:

1
2
3
4
5
6
from datetime import datetime

str = '9-15-18'
date_object = datetime.strptime(str, '%m-%d-%y')

print(date_object)

Producción:

1
2018-09-15 00:00:00

Y nuevamente, gracias al especificador de formato, el método strptime pudo analizar nuestra fecha y convertirla en un objeto de fecha.

Conclusión

En este artículo, estudiamos cómo formatear fechas en Python. Vimos cómo se puede usar el módulo datetime en Python para la manipulación de valores de fecha y hora. El módulo contiene una serie de clases que se pueden utilizar para este propósito. Por ejemplo, la clase time se usa para representar valores de tiempo, mientras que la clase date se usa para representar valores de fecha de calendario.

Licensed under CC BY-NC-SA 4.0