¿Cómo paso de UTC a la hora de Ciudad de México?
Un sistema guarda la hora en UTC. Conviértela con el nombre de la zona horaria antes de contar por día, mes u hora.
Curso gratis. Tu Maestro, una IA, .
La hora del servidor no es la hora de la tienda
Los sistemas en línea suelen guardar la hora en UTC, el tiempo universal coordinado: una hora de referencia que no cambia con el país ni con la temporada. Así un sistema con clientes en varias zonas tiene una sola hora para todos. Por eso la columna se llama creado_utc.
Para Café Altura lo que importa es otra hora: la de Ciudad de México, donde están sus tres sucursales. El primer pedido se creó el 2026-02-01 02:44:40 en UTC. ¿A qué hora y qué día fue en la ciudad?
Dos conversiones de UTC a la zona horaria America/MexicoCity. Escribe qué crees que imprime cada una y por qué.
Dos conversiones de UTC a la zona horaria America/Mexico_City. Escribe qué crees que imprime cada una y por qué.
El primer pedido
Ejemplo 1 de 2
import pandas as pd
utc = pd.Series(pd.to_datetime(["2026-02-01 02:44:40"], utc=True))
print(utc.dt.tz_convert("America/Mexico_City"))
Adivinar está bien: se guarda tal como la escribiste para compararla. Solo tú y tu Maestro ven tus predicciones.
Ejemplo 2 de 2, se abre cuando expliques este
Por qué cambió la diferencia
El 28 de octubre de 2022 se publicó la Ley de los Husos Horarios en los Estados Unidos Mexicanos, que entró en vigor el 30 de octubre de 2022 y abrogó la Ley del Sistema de Horario de 2001. Su artículo 3, fracción I, define la Zona Centro, referida al meridiano 90 grados al oeste de Greenwich, como la que comprende la mayor parte del territorio nacional. Las fracciones siguientes apartan las zonas Pacífico, Noroeste y Sureste y las islas, y ninguna incluye a Ciudad de México. El artículo 4 dice: "Únicamente se aplicará un horario estacional para los estados y municipios de la frontera norte", y el artículo 5 los enumera: Ciudad de México no está entre ellos.
Por eso la ciudad ya no cambia la hora en verano. Que eso sea seis horas detrás de UTC todo el año no lo dice la ley: lo muestra la base de datos de zonas horarias, en la conversión que corriste, que da seis horas menos que UTC en febrero y en julio de 2026.
De eso sale la regla práctica: convierte con el nombre de la zona, no con un número. America/Mexico_City sabe qué diferencia había en cada fecha. Restar 6 horas fijas da la hora equivocada en cualquier fecha de verano anterior a la ley. Si tus datos mezclan fechas de antes y después de 2022, revisa con tu Maestro cómo convertirlas.
En pedidos, creado_utc ya sabe que está en UTC (su tipo es datetime64[us, UTC]). tz_convert la pasa a otra zona:
data["creado_local"] = data["creado_utc"].dt.tz_convert("America/Mexico_City")Si tu columna no tiene zona, primero dile cuál es con .dt.tz_localize("UTC").
En DuckDB, creado_utc es un TIMESTAMP sin zona. El primer AT TIME ZONE le dice que esa hora está en UTC; el segundo la pasa a la hora de la ciudad:
SELECT
creado_utc,
creado_utc AT TIME ZONE 'UTC' AT TIME ZONE 'America/Mexico_City' AS creado_local
FROM pedidos;Lo que cambia en un reporte
Una conversión de seis horas parece poca cosa hasta que cuentas por mes. En UTC, pedidos tiene 145 pedidos en febrero y 159 en marzo. En hora de Ciudad de México tiene 2 en enero, 144 en febrero y 158 en marzo: los pedidos de las últimas horas de cada mes en la ciudad caen en el mes siguiente en UTC.
La hora del día cambia todavía más. La gráfica de abajo cuenta pedidos por hora con la hora tal como viene, en UTC: parece que la gente pide café a la una de la mañana y nadie pide entre las 6 y las 12.
Inténtalo
Convierte creado_utc a America/Mexico_City antes de sacar la hora, y mira cómo se mueve la gráfica. Ya quedó cuando los pedidos empiezan a las 7 de la mañana y no hay ninguno de medianoche a las 6. Si la gráfica no cambia, pégale tu código a tu Maestro.
La gráfica cuenta pedidos por hora del día con la hora en UTC. Cambia la línea que calcula hora para que use la hora de Ciudad de México (America/MexicoCity).
Tu turno
La gráfica cuenta pedidos por hora del día con la hora en UTC. Cambia la línea que calcula hora para que use la hora de Ciudad de México (America/Mexico_City).
La gráfica se vuelve a dibujar cuando haces una pausa, o al momento con Ejecutar. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Datos: pedidos-en-linea, 304 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | |||
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 | ||||
| 8 | ||||
| 9 | ||||
| 10 | ||||
| 11 | ||||
| 12 | ||||
| 13 | ||||
| 14 | ||||
| 15 | ||||
| 16 | ||||
| 17 | ||||
| 18 | ||||
| 19 | ||||
| 20 |
Inténtalo en DuckDB
Ahora el reporte mensual. La consulta cuenta pedidos y suma el total por mes con la hora en UTC. Convierte la hora antes de sacar el mes. strftime hace lo contrario de strptime: escribe una fecha como texto con un formato, y aquí '%Y-%m' deja solo el año y el mes. Una buena respuesta tiene tres filas: enero con 2 pedidos, febrero con 144 y marzo con 158.
Cuenta los pedidos y suma el total por mes, con el mes en hora de Ciudad de México.
Tu turno
Cuenta los pedidos y suma el total por mes, con el mes en hora de Ciudad de México.
Tablas: pedidos (pedido_id, creado_utc, total)
pedidos · 304 filas
| Columna | Tipo |
|---|---|
| pedido_id | BIGINT |
| creado_utc Cuándo se hizo el pedido, en UTC, como lo guarda la tienda en línea. | TIMESTAMP |
| total Total del pedido en pesos. | BIGINT |
Primeras filas
| pedido_id | creado_utc | total |
|---|---|---|
| 5001 | 2026-02-01T02:44:40Z | 89 |
| 5002 | 2026-02-01T02:54:59Z | 420 |
| 5003 | 2026-02-01T15:15:38Z | 89 |
Cada ejecución empieza con copias nuevas de las tablas del curso, así que puedes probar lo que quieras. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu consulta.