DateTime
DateTime
Sección titulada «DateTime»DateTime es una utilidad a nivel de clase que proporciona una API consistente y consciente de zonas horarias para todas las operaciones de fecha y hora en el framework. Gestiona una zona horaria y un locale configurables por defecto, de modo que cada método — desde crear instantes hasta formatear salidas — produce resultados en el contexto esperado sin necesidad de pasar argumentos de zona horaria en cada llamada.
Todos los métodos son métodos de clase. No es necesario instanciar DateTime; llame a los métodos directamente sobre la clase.
Importación
Sección titulada «Importación»from orionis.support.time.datetime import DateTimeMétodos Internos
Sección titulada «Métodos Internos»La clase expone tres métodos con prefijo que están reservados para el proceso de arranque interno del framework:
| Método | Efecto |
|---|---|
_loadConfig(timezone?, locale?) | Sobrescribe la zona horaria y el locale por defecto para todas las llamadas posteriores |
_setTimezone(name) | Reemplaza la zona horaria por defecto de forma global |
_setLocale(code) | Reemplaza el locale por defecto de forma global |
Configuración
Sección titulada «Configuración»getZoneinfo
Sección titulada «getZoneinfo»Retorna un objeto ZoneInfo de la biblioteca estándar para la zona horaria configurada, útil al interactuar con código que espera tipos zoneinfo:
from zoneinfo import ZoneInfo
zi = DateTime.getZoneinfo() # ZoneInfo(key='Europe/Berlin')Crear Instantes
Sección titulada «Crear Instantes»Cada método de instante acepta un parámetro opcional tz. Cuando se omite, se usa la zona horaria configurada por defecto.
Retorna la fecha y hora actual:
DateTime.now() # momento actual en tz por defectoDateTime.now(tz="Asia/Singapore") # momento actual en SingapurRetorna la fecha de hoy a medianoche (00:00:00):
DateTime.today()DateTime.today(tz="Australia/Sydney")tomorrow / yesterday
Sección titulada «tomorrow / yesterday»Retornan la fecha un día adelante o atrás, respectivamente:
DateTime.tomorrow()DateTime.yesterday(tz="Pacific/Auckland")datetime
Sección titulada «datetime»Método fábrica que crea un datetime específico con componentes individuales. Solo year es requerido; todos los demás componentes tienen valores mínimos por defecto:
DateTime.datetime(2024, 6, 15, 10, 30, 45)# 2024-06-15 10:30:45 en la zona horaria por defecto
DateTime.datetime(2024, tz="Europe/Madrid")# 2024-01-01 00:00:00 en MadridAnálisis y Conversión
Sección titulada «Análisis y Conversión»Analiza una cadena de fecha ISO 8601 y la convierte a la zona horaria objetivo:
dt = DateTime.parse("2024-06-15T12:00:00+00:00")# Convertido a la zona horaria por defecto
dt = DateTime.parse("2024-01-01T00:00:00+00:00", tz="Asia/Tokyo")# Convertido a TokiofromTimestamp
Sección titulada «fromTimestamp»Convierte un timestamp Unix a un datetime:
dt = DateTime.fromTimestamp(0.0)# 1970-01-01 00:00:00 UTC
dt = DateTime.fromTimestamp(1718400000, tz="America/Chicago")fromDatetime
Sección titulada «fromDatetime»Convierte un datetime de la biblioteca estándar o una instancia DateTime existente a la zona horaria objetivo. Lanza TypeError para tipos no soportados:
from datetime import datetime, timezone
# Datetime ingenuo — se asume que está en la zona horaria configuradadt = DateTime.fromDatetime(datetime(2024, 3, 15, 10, 30))
# Datetime consciente — se convierte a la zona horaria configuradaaware = datetime(2024, 3, 15, 10, 30, tzinfo=timezone.utc)dt = DateTime.fromDatetime(aware)
# Con zona horaria objetivo explícitadt = DateTime.fromDatetime(aware, tz="Asia/Seoul")convertToLocal
Sección titulada «convertToLocal»Acepta una cadena, datetime de la biblioteca estándar, o una instancia DateTime y lo convierte a la zona horaria configurada:
dt = DateTime.convertToLocal("2024-06-15T12:00:00+00:00")dt = DateTime.convertToLocal(datetime(2024, 6, 15, 12, 0, 0))Formateo
Sección titulada «Formateo»formatLocal
Sección titulada «formatLocal»Formatea un datetime como cadena. Por defecto usa YYYY-MM-DD HH:mm:ss. Cuando no se proporciona datetime, formatea el momento actual:
dt = DateTime.datetime(2024, 6, 15, 10, 30, 45, tz="UTC")
DateTime.formatLocal(dt)# "2024-06-15 10:30:45"
DateTime.formatLocal(dt, format_string="YYYY/MM/DD")# "2024/06/15"
DateTime.formatLocal()# datetime actual formateado con el patrón por defectoLímites
Sección titulada «Límites»Los métodos de límites ajustan un datetime al inicio o final de un período de tiempo. Cuando se llaman sin argumento dt, utilizan el datetime actual.
ref = DateTime.datetime(2024, 6, 12, 14, 30, 45, tz="UTC")
DateTime.startOfDay(ref) # 2024-06-12 00:00:00DateTime.endOfDay(ref) # 2024-06-12 23:59:59
DateTime.startOfDay() # hoy a las 00:00:00DateTime.endOfDay() # hoy a las 23:59:59Las semanas comienzan el lunes y terminan el domingo:
DateTime.startOfWeek(ref) # Lunes 00:00:00DateTime.endOfWeek(ref) # Domingo 23:59:59DateTime.startOfMonth(ref) # 2024-06-01 00:00:00DateTime.endOfMonth(ref) # 2024-06-30 23:59:59DateTime.startOfYear(ref) # 2024-01-01 00:00:00DateTime.endOfYear(ref) # 2024-12-31 23:59:59Aritmética
Sección titulada «Aritmética»Los métodos aritméticos aceptan valores negativos para retroceder en el tiempo.
addDays
Sección titulada «addDays»ref = DateTime.datetime(2024, 1, 1, 12, 0, 0, tz="UTC")
DateTime.addDays(ref, 5) # 2024-01-06DateTime.addDays(ref, -3) # 2023-12-29addHours
Sección titulada «addHours»DateTime.addHours(ref, 3) # 15:00DateTime.addHours(ref, 14) # día siguiente 02:00addMinutes
Sección titulada «addMinutes»DateTime.addMinutes(ref, 30) # 12:30DateTime.addMinutes(ref, 90) # 13:30diffInDays
Sección titulada «diffInDays»Retorna la diferencia absoluta en días entre dos datetimes:
a = DateTime.datetime(2024, 1, 1, tz="UTC")b = DateTime.datetime(2024, 1, 11, tz="UTC")
DateTime.diffInDays(a, b) # 10diffInHours
Sección titulada «diffInHours»Retorna la diferencia absoluta en horas:
a = DateTime.datetime(2024, 1, 1, 12, 0, 0, tz="UTC")b = DateTime.addHours(a, 6)
DateTime.diffInHours(a, b) # 6Predicados
Sección titulada «Predicados»isWeekend
Sección titulada «isWeekend»Retorna True para sábado o domingo. Sin argumentos, verifica la fecha actual:
saturday = DateTime.datetime(2024, 6, 8, tz="UTC")monday = DateTime.datetime(2024, 6, 10, tz="UTC")
DateTime.isWeekend(saturday) # TrueDateTime.isWeekend(monday) # FalseDateTime.isWeekend() # depende del día actualisToday
Sección titulada «isToday»DateTime.isToday(DateTime.now()) # TrueDateTime.isToday(DateTime.yesterday()) # FalseisFuture / isPast
Sección titulada «isFuture / isPast»future = DateTime.addDays(DateTime.now(), 100)past = DateTime.addDays(DateTime.now(), -100)
DateTime.isFuture(future) # TrueDateTime.isPast(past) # TrueReferencia de Métodos
Sección titulada «Referencia de Métodos»| Método | Retorna | Descripción |
|---|---|---|
getZoneinfo() | ZoneInfo | Retorna un ZoneInfo para la zona horaria actual |
now(tz?) | DateTime | Fecha y hora actual |
today(tz?) | DateTime | Hoy a medianoche |
tomorrow(tz?) | DateTime | Mañana a medianoche |
yesterday(tz?) | DateTime | Ayer a medianoche |
datetime(year, ...) | DateTime | Construye un datetime específico |
parse(string, tz?) | DateTime | Analiza una cadena de fecha |
fromTimestamp(ts, tz?) | DateTime | Convierte un timestamp Unix |
fromDatetime(dt, tz?) | DateTime | Convierte un datetime stdlib o del framework |
convertToLocal(dt) | DateTime | Convierte cualquier entrada de fecha a la zona horaria configurada |
formatLocal(dt?, fmt?) | str | Formatea un datetime como cadena |
startOfDay(dt?) | DateTime | Ajusta a las 00:00:00 del día |
endOfDay(dt?) | DateTime | Ajusta a las 23:59:59 del día |
startOfWeek(dt?) | DateTime | Lunes a las 00:00:00 |
endOfWeek(dt?) | DateTime | Domingo a las 23:59:59 |
startOfMonth(dt?) | DateTime | Primer día a las 00:00:00 |
endOfMonth(dt?) | DateTime | Último día a las 23:59:59 |
startOfYear(dt?) | DateTime | 1 de enero a las 00:00:00 |
endOfYear(dt?) | DateTime | 31 de diciembre a las 23:59:59 |
addDays(dt, n) | DateTime | Suma n días |
addHours(dt, n) | DateTime | Suma n horas |
addMinutes(dt, n) | DateTime | Suma n minutos |
diffInDays(dt1, dt2) | int | Diferencia absoluta en días |
diffInHours(dt1, dt2) | int | Diferencia absoluta en horas |
isWeekend(dt?) | bool | True si es sábado o domingo |
isToday(dt) | bool | True si la fecha es hoy |
isFuture(dt) | bool | True si es posterior al momento actual |
isPast(dt) | bool | True si es anterior al momento actual |
Trabajar con la Instancia DateTime Subyacente
Sección titulada «Trabajar con la Instancia DateTime Subyacente»Cada método que retorna un DateTime en realidad devuelve un objeto datetime enriquecido. Puede llamar a cualquier método de la biblioteca subyacente directamente sobre la instancia retornada, lo que le da acceso al rango completo de operaciones más allá de lo que esta clase expone:
# Obtener una instancia a través de cualquier método DateTimedt = DateTime.now()
# Acceder a propiedades extendidasdt.day_of_week # 0 (Lunes) a 6 (Domingo)dt.day_of_year # 1–366dt.week_of_year # 1–53dt.days_in_month # 28–31dt.timezone_name # 'America/Bogota'
# Usar aritmética extendidadt.add(months=2, weeks=1)dt.subtract(years=1)
# Helpers de diferenciadt.diff(DateTime.yesterday()).in_hours() # horas entre dos instantes
# Diferencia legible para humanosdt.diff_for_humans() # ej. "hace 2 horas"
# Salida ISO 8601dt.to_iso8601_string() # '2024-06-15T10:30:45-05:00'dt.to_date_string() # '2024-06-15'dt.to_time_string() # '10:30:45'