Los timestamps son el típico “detalle tonto” que, cuando se rompe, lo rompe TODO 😅: máximos diarios mal puestos, lluvia diaria que no cuadra, picos a horas raras… y tú pensando que el sensor está poseído.
Esta guía es para que lo tengamos controlado: qué es UTC, qué pasa con las zonas horarias, cómo nos afecta el cambio de hora, y cómo detectar desfases del logger y errores de pipeline sin drama.
Este artículo forma parte del tema Datos de calidad en WikiMeteo.es, donde reunimos conceptos y guías prácticas para entender mejor el tiempo y el clima.
Accesos directos:
- Regla de oro (la que nos salva): sección 2
- Errores típicos: sección 4
- Checklist rápido: sección 6
1. Qué es un timestamp (sin humo)
Un timestamp es “cuándo” pasó una medida. No es solo un número: incluye fecha, hora y, muy importante, zona horaria (o al menos una política clara).
Si el “cuándo” está mal, cualquier cosa que dependa del tiempo se deforma: máximos/mínimos diarios, acumulados diarios, medias horarias, comparaciones con radar…
2. Regla de oro
Guardar siempre en UTC y convertir a hora local solo al mostrar.
Si guardas en local, tarde o temprano te comes el cambio de hora o un proceso que asume UTC y te lo desplaza todo.
3. Zonas horarias y cambio de hora (DST) explicado fácil
En muchos sitios (Europa incluida), hay días con 23 horas (salto hacia delante) y días con 25 horas (vuelta atrás). Eso significa:
- Un “día local” puede no tener 24h.
- Si calculas diarios como si siempre fueran 24h, saldrán raros.
- Puede haber horas que se repiten (duplicados) o que no existen (gaps).
4. Errores típicos que veremos en estaciones
4.1 Local vs UTC mezclado
Síntoma: máximos diarios “desplazados” (ej. pico de radiación solar a las 11:00 o 13:00), o lluvia diaria que “corta” a horas extrañas.
Causa: una parte del pipeline trata timestamps como UTC y otra como local.
Arreglo: almacenamiento UTC, UI local. Y prohibido usar datetime “naive” (sin zona) sin una política.
4.2 Timestamp naive (sin zona horaria)
Síntoma: en unos sitios cuadra y en otros no, o al migrar de servidor se descoloca todo.
Causa: “2026-01-27 12:00:00” no dice si es UTC o local.
Arreglo: guardar con offset o normalizar a UTC antes de persistir.
4.3 Drift del logger (desfase progresivo)
Síntoma: cada semana el pico de radiación solar aparece un poco “corridito”; o los eventos ya no casan con radar/estaciones cercanas.
Causa: el reloj interno del datalogger deriva.
Arreglo: sincronización (NTP si se puede) y registrar correcciones. No reescribir raw sin trazabilidad.
4.4 Duplicados y gaps
Síntoma: dos muestras con el mismo timestamp (sobre todo en la vuelta del cambio de hora) o huecos raros.
Arreglo: deduplicación por regla clara (ID de muestra si existe, o conservar la más “fiable”) y flags de datos faltantes.
5. Ejemplos “de sensores reales” (lo que suele delatarlo)
- Pluviómetro (tipping bucket): el acumulado diario parece “bajar” o reiniciarse en horas concretas → muchas veces es reset del contador + timestamps mal interpretados.
- Radiación solar: el máximo del día aparece consistentemente 1–2 horas desplazado → sospecha UTC/local o drift.
- Temperatura/humedad: medias diarias raras pero la curva es “bonita” → el dato es bueno, el “día” está mal cortado.
- Viento (media/racha): si calculas rachas por ventanas y las ventanas están mal alineadas por zona horaria, verás rachas en horas “sin viento” (porque estás mezclando intervalos).
6. Checklist rápido (para no perdernos)
- ¿Guardamos en UTC? (sí/no)
- ¿La UI muestra en local? (sí/no)
- ¿Hay días con 23/25 horas? (cambio de hora)
- ¿Hay duplicados? (misma fecha-hora repetida)
- ¿Hay gaps? (saltos grandes sin datos)
- ¿El máximo de radiación cae cerca del mediodía local? (sanity check)
- ¿Comparación con radar/vecinas cuadra en la hora del evento?
7. Errores comunes (los que nos hacen perder una tarde)
- Guardar en local “porque es más cómodo”
- Mezclar fuentes con zonas distintas sin normalizar
- Calcular diarios asumiendo 24h siempre
- No marcar datos faltantes (parece que no llovió cuando en realidad faltó el dato)
8. Mini-glosario
- UTC: referencia global sin cambio de hora
- DST: cambio de hora estacional (23h/25h)
- Drift: deriva del reloj del logger
- Naive datetime: fecha-hora sin zona horaria
9. Referencias y lecturas recomendadas
- ECMWF
- Copernicus
- WMO