Cómo obtener la fecha y hora actuales en Python

    Introducción

    Registrar, guardar registros en la base de datos y acceder a archivos son tareas comunes en las que trabaja un programador. En cada uno de esos casos, la fecha y la hora juegan un papel importante en la preservación del significado y la integridad de los datos. Los programadores a menudo necesitan interactuar con la fecha y la hora.

    En este artículo, aprenderemos cómo obtener la fecha y la hora actuales usando la función incorporada de Python fecha y hora módulo. Con ese módulo, podemos obtener todos los datos relevantes en un objeto o extraer la fecha y la hora por separado.

    También aprenderemos cómo ajustar nuestra fecha y hora para diferentes zonas horarias. Finalmente, veremos cómo convertir datetime objetos a las populares marcas de tiempo de Unix o Epoch.

    Obtener la fecha y hora actuales con datetime

    los datetime El módulo contiene varias clases para obtener información sobre la fecha y la hora:

    • datetime.date: Almacena el día, mes y año o una fecha
    • datetime.time: Almacena el tiempo en horas, minutos, segundos y microsegundos. Esta información es independiente de cualquier fecha
    • datetime.datetime: Almacena ambos date y time atributos

    Obtengamos la fecha y hora actuales con un datetime.datetime objeto, ya que es más fácil de extraer date y time objetos de ella. Primero, importemos el datetime módulo:

    from datetime import datetime
    

    Si bien parece extraño al principio, estamos obteniendo la datetime clase de la datetime módulo, que son dos cosas separadas.

    Podemos usar el now() función para obtener un objeto con la fecha y hora actual:

    current_datetime = datetime.now()
    print(current_datetime)
    

    Ejecutar este archivo nos dará el siguiente resultado:

    2019-12-13 12:18:18.290623
    

    los now() La función nos dio un objeto con toda la fecha y hora del momento en que fue creado. Cuando lo imprimimos, Python formatea automáticamente el objeto en una cadena para que los humanos puedan leerlo fácilmente. Puede leer nuestra guía sobre Cómo formatear fechas en Python para aprender varias formas de imprimir la hora.

    Puede obtener atributos individuales de la fecha y la hora de esta manera:

    print(current_datetime.year)            # 2019
    print(current_datetime.month)           # 12
    print(current_datetime.day)             # 13
    print(current_datetime.hour)            # 12
    print(current_datetime.minute)          # 18
    print(current_datetime.second)          # 18
    print(current_datetime.microsecond)     # 290623
    

    los now() El método es perfecto para capturar un momento. Sin embargo, es redundante cuando solo le importa la fecha o la hora, pero no ambas. ¿Cómo podemos obtener solo información sobre la fecha?

    Obtener la fecha actual

    Hay dos formas de obtener la fecha actual en Python. En la consola de Python, podemos obtener la fecha de un datetime objeto con el date() método:

    >>> from datetime import datetime
    >>> current_date = datetime.now().date()
    >>> print(current_date)
    2019-12-13
    

    Sin embargo, parece un desperdicio inicializar un datetime Objeto solo para capturar la fecha. Una alternativa sería utilizar el today() método del date clase:

    >>> from datetime import date
    >>> current_date = date.today()
    >>> print(current_date)
    2019-12-13
    

    los datetime.date la clase representa una fecha del calendario. Sus year, monthy day se puede acceder a los atributos de la misma manera que accedemos a ellos en el datetime objeto.

    Por ejemplo, este print declaración obtiene cada atributo, y también usa el weekday() método para obtener el día de la semana:

    >>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" %
    ... (current_date.weekday()+1, current_date.day, current_date.month, current_date.year))
    It's the 5th day of the week, 13th day of the 12th month of the 2019th year
    

    Nota: Los weekday() El método devuelve un número entero entre 0 y 6 para representar el día de la semana. 0 corresponde al lunes. Por lo tanto, en nuestro ejemplo agregamos 1 para imprimir el quinto día de la semana (viernes), aunque el weekday() método devuelto 4.

    Ahora que podemos obtener la fecha actual por sí sola, veamos cómo podemos obtener la hora actual.

    Obtener la hora actual

    Capturamos la hora actual de un datetime objeto usando el time() método:

    >>> from datetime import datetime
    >>> current_time = datetime.now().time()
    >>> print(current_time)
    12:18:18.290623
    

    A diferencia de la recuperación de fechas, no existe un atajo para capturar la hora actual directamente. los datetime.time class representa una noción de tiempo en horas, minutos, segundos y microsegundos, cualquier cosa que sea menos de un día.

    Como el datetime objeto, podemos acceder a sus atributos directamente. Aquí hay un ejemplo donde imprimimos el current_time en una frase:

    >>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" %
    ... (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond))
    It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds
    

    Por defecto, el now() La función devuelve la hora de su zona horaria local. ¿Qué pasaría si tuviéramos que convertirlo en uno diferente que se estableció en la preferencia de un usuario? Veamos cómo podemos proporcionar información de la zona horaria para localizar time objetos.

    Obtener la fecha y la hora actuales en una zona horaria diferente

    los now() acepta una zona horaria como argumento, de modo que el datetime objeto que se está generando se ajustará adecuadamente. Primero, necesitamos obtener datos de la zona horaria a través del Pytz biblioteca.

    Instala el pytz biblioteca con pip si aún no está disponible en su computadora:

    $ pip3 install pytz
    

    Ahora, usemos pytz para obtener la fecha y hora actual si estuviéramos en Berlín:

    >>> import pytz
    >>> from datetime import datetime
    >>> tz = pytz.timezone('Europe/Berlin')
    >>> berlin_current_datetime = datetime.now(tz)
    >>> print(berlin_current_datetime)
    2019-12-14 00:20:50.840350+01:00
    

    los berlin_current_datetime seria un datetime objeto con todas las propiedades y funciones que vimos anteriormente, pero ahora encaja perfectamente con lo que es para alguien que vive allí.

    Si desea obtener la hora en UTC, puede utilizar el pytz módulo como antes:

    >>> import pytz
    >>> from datetime import datetime
    >>> utc_current_datetime = datetime.now(pytz.timezone("UTC"))
    >>> print(utc_current_datetime)
    2019-12-13 23:20:50.840350+00:00
    

    Alternativamente, para la hora UTC no tiene que usar el pytz módulo en absoluto. los datetime el módulo tiene un timezone propiedad, que se puede utilizar así:

    >>> from datetime import datetime, timezone
    >>> utc_current_datetime = datetime.now(timezone.utc)
    >>> print(utc_current_datetime)
    2019-12-13 23:20:50.840350+00:00
    

    Ahora que podemos convertir nuestras fechas y horas para que coincidan con diferentes zonas horarias, veamos cómo podemos convertirlo a uno de los formatos más utilizados en informática: las marcas de tiempo Unix.

    Conversión de marcas de tiempo en fechas y horas

    Los sistemas informáticos miden el tiempo en función del número de segundos transcurridos desde la época Unix, es decir, 00:00:00 UTC del 1 de enero de 1970. Es común que las aplicaciones, bases de datos y protocolos utilicen una marca de tiempo para mostrar el tiempo.

    Puede obtener la marca de tiempo actual en Python usando el time biblioteca:

    >>> import time
    >>> print(time.time())
    1576280665.0915806
    

    los time.time() La función devuelve un número flotante con la marca de tiempo de Unix. Puede convertir una marca de tiempo en un datetime objeto usando el fromtimestamp() función:

    >>> from datetime import datetime
    >>> print(datetime.fromtimestamp(1576280665))
    2019-12-13 19:44:25
    

    Por defecto, el fromtimestamp() devuelve un datetime objeto en su zona horaria. Puede proporcionar una zona horaria como segundo argumento si desea que se localice de manera diferente.

    Por ejemplo, para convertir una marca de tiempo en un datetime objeto en UTC, puede hacer esto:

    >>> from datetime import datetime, timezone
    >>> print(datetime.fromtimestamp(1576280665, timezone.utc))
    2019-12-13 19:44:25+00:00
    

    Por el contrario, puede utilizar el timestamp() método para convertir un datetime objetar a una marca de tiempo válida:

    >>> from datetime import datetime, timezone
    >>> print(datetime.now(timezone.utc).timestamp())
    1577117555.940705
    

    Conclusión

    Python incorpora datetime esta biblioteca nos permite obtener la fecha y hora actual con la now() función. Podemos usar el devuelto datetime objeto para extraer solo la parte de la fecha o la parte de la hora. También podemos obtener la fecha actual con el today() función.

    Por defecto, Python crea datetime objetos en nuestra zona horaria local. Si utilizamos el pytz biblioteca, podemos convertir fechas y horas en diferentes zonas horarias.

    Finalmente, usamos el fromtimestamp() función para tomar una marca de tiempo Unix para obtener una datetime objeto. Si tenemos un datetime objeto, podemos obtener una marca de tiempo usando su timestamp() método.

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *