Módulo Python datetime
de PythondatetimeEl módulo es un módulo de la biblioteca estándar para manejar fechas y horas. Proporciona varias clases y funciones que nos ayudan a manejar fácilmente operaciones como fechas, horas, diferencias de tiempo, etc. Ya sea obtener la hora actual, formatear fechas o calcular diferencias de tiempo,datetimeel módulo puede encargarse de todo.
Clases principales del módulo datetime
datetimeEl módulo contiene las siguientes clases principales:
dateClase -dateLa clase se usa para representar la fecha, con tres atributos: año, mes, día.-
timeClase -timeLa clase se usa para representar la hora, con atributos como hora, minuto, segundo, microsegundo. -
datetimeClase -datetimeLa clase esdateytimela combinación de ambos, puede representar fecha y hora al mismo tiempo. -
timedeltaClase -timedeltaLa clase se usa para representar diferencias de tiempo, y puede usarse para sumar y restar fechas y horas.
Usar el módulo datetime
Obtener la fecha y hora actuales
Podemos usardatetimede la clasenow()el método para obtener la fecha y hora actuales.
Ejemplo
# Obtener la fecha y hora actuales
now = datetime.now()
print("Hora actual:", now)
Ejemplo de salida:
当前时间: 2025-04-22 14:30:45.123456
Crear una fecha y hora específicas
Podemos, mediantedatetimeel constructor de la clase, crear una fecha y hora específicas.
Ejemplo
# Crear una fecha y hora específicas
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("Hora específica:", specific_time)
Ejemplo de salida:
特定时间: 2025-04-22 15:30:00
Formatear fecha y hora
datetimeEl objeto puede, mediantestrftime()el método, formatearse como cadena.
Ejemplo
# Obtener la hora actual
now = datetime.now()
# Formatear la salida
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("Hora formateada:", formatted_time)
Ejemplo de salida:
格式化时间: 2025-04-22 14:30:45
Calcular la diferencia de tiempo
timedeltaLa clase se puede usar para calcular la diferencia entre dos fechas u horas.
Ejemplo
# Obtener la hora actual
now = datetime.now()
# Calcular el tiempo dentro de 10 días
future_time = now + timedelta(days=10)
print("Tiempo dentro de 10 días:", future_time)
Ejemplo de salida:
10 天后的时间: 2025-05-02 14:30:45.123456
Casos de uso comunes
Calcular los días entre dos fechas
Ejemplo
# Crear dos fechas
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)
# Calcular la diferencia de días
delta = date2 - date1
print("Diferencia de días entre dos fechas:", delta.days)
Ejemplo de salida:
两个日期之间的天数差: 9
Manejo de zonas horarias
datetimeEl módulo en sí no admite directamente operaciones de zona horaria, pero se puede usarpytzla biblioteca para manejar la zona horaria.
Ejemplo
import pytz
# Obtener la hora actual y configurar la zona horaria
now = datetime.now(pytz.timezone('Asia/Shanghai'))
print("Hora actual de Shanghái:", now)
Ejemplo de salida:
上海当前时间: 2025-04-22 14:30:45.123456+08:00
Clases, métodos y atributos comunes
1. Clases principales
| Clase | Descripción | Ejemplo |
|---|---|---|
datetime.date |
Clase de fecha (año, mes, día) | date(2023, 5, 15) |
datetime.time |
Clase de hora (hora, minuto, segundo, microsegundo) | time(14, 30, 0) |
datetime.datetime |
Clase de fecha y hora (incluye fecha y hora) | datetime(2023, 5, 15, 14, 30) |
datetime.timedelta |
Clase de intervalo de tiempo (para cálculos de fecha/hora) | timedelta(days=5) |
datetime.tzinfo |
Clase base de información de zona horaria (requiere subclase para implementarse) | Clase de zona horaria personalizada |
2. dateMétodos/atributos comunes del objeto
| Método/Atributo | Descripción | Ejemplo |
|---|---|---|
date.today() |
Devuelve la fecha local actual | date.today() → date(2023, 5, 15) |
date.fromisoformat(str) |
desdeYYYY-MM-DDAnaliza una fecha desde una cadena |
date.fromisoformat("2023-05-15") |
date.year |
Año (solo lectura) | d.year → 2023 |
date.month |
Mes (1-12, solo lectura) | d.month → 5 |
date.day |
Día (1-31, solo lectura) | d.day → 15 |
date.weekday() |
Devuelve el día de la semana (0=lunes, 6=domingo) | d.weekday() → 0 |
date.isoformat() |
DevuelveYYYY-MM-DDuna cadena de formato |
d.isoformat() → "2023-05-15" |
date.strftime(format) |
Salida formateada personalizada | d.strftime("%Y/%m/%d") → "2023/05/15" |
3. timeMétodos/atributos comunes del objeto
| Método/Atributo | Descripción | Ejemplo |
|---|---|---|
time.hour |
Hora (0-23, solo lectura) | t.hour → 14 |
time.minute |
Minuto (0-59, solo lectura) | t.minute → 30 |
time.second |
Segundo (0-59, solo lectura) | t.second → 0 |
time.microsecond |
Microsegundo (0-999999, solo lectura) | t.microsecond → 0 |
time.isoformat() |
DevuelveHH:MM:SS.mmmmmmuna cadena de formato |
t.isoformat() → "14:30:00" |
time.strftime(format) |
Salida formateada personalizada | t.strftime("%H:%M") → "14:30" |
4. datetimeMétodos/atributos comunes del objeto
| Método/Atributo | Descripción | Ejemplo |
|---|---|---|
datetime.now() |
Devuelve la fecha y hora local actuales | datetime.now() → datetime(2023, 5, 15, 14, 30, 0) |
datetime.utcnow() |
Devuelve la fecha y hora UTC actuales | datetime.utcnow() |
datetime.fromtimestamp(ts) |
Crea, desde una marca de tiempo,datetimeel objeto. |
datetime.fromtimestamp(1684146600) |
datetime.timestamp() |
Devuelve la marca de tiempo (segundos como flotante) | dt.timestamp() → 1684146600.0 |
datetime.date() |
Extrae la parte de la fecha | dt.date() → date(2023, 5, 15) |
datetime.time() |
Extrae la parte de la hora | dt.time() → time(14, 30) |
datetime.year |
Año (igual quedate) |
dt.year → 2023 |
datetime.strftime(format) |
Salida formateada personalizada | dt.strftime("%Y-%m-%d %H:%M") → "2023-05-15 14:30" |
5. timedeltaAtributos comunes del objeto
| Atributo | Descripción | Ejemplo |
|---|---|---|
days |
Días (puede ser positivo o negativo) | delta.days → 5 |
seconds |
Segundos (0-86399) | delta.seconds → 3600(1 hora) |
microseconds |
Microsegundos (0-999999) | delta.microseconds → 0 |
6. Símbolos de formato comunes (strftime)
| Símbolo | Descripción | Salida de ejemplo |
|---|---|---|
%Y |
Año de cuatro dígitos | 2023 |
%m |
Mes de dos dígitos (01-12) | 05 |
%d |
Día de dos dígitos (01-31) | 15 |
%H |
Hora en formato de 24 horas (00-23) | 14 |
%M |
Minuto (00-59) | 30 |
%S |
Segundo (00-59) | 00 |
%A |
Nombre completo del día de la semana | Monday |
%a |
Nombre abreviado del día de la semana | Mon |
%B |
Nombre completo del mes | May |
%b |
Nombre abreviado del mes | May |
Ejemplo
1. Calcular la diferencia de fechas
Ejemplo
d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1 # Devolver el objeto timedelta
print(delta.days) # Salida: 17
2. Suma y resta de tiempo
Ejemplo
now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))
3. Conversión de zona horaria (requiere instalar pytz)
Ejemplo
import pytz
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)
4. Analizar cadenas
Ejemplo
dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year) # Salida: 2023
Notas importantes
Inmutabilidad: todos
datetimelos objetos son inmutables; las operaciones devuelven objetos nuevos.Manejo de zona horaria: nativos
datetimesin soporte de zona horaria, se necesita usarpytzo el de Python 3.9+zoneinfo。Rendimiento: crear objetos con frecuencia puede afectar al rendimiento; considera reutilizarlos o almacenarlos en caché.
Verificación de límites: fechas no válidas (como
date(2023, 2, 30)) activaránValueError。