Convertir zonas horarias
Una reunión programada 'a las 9am hora del Este' significa algo distinto en enero que en julio, y un simple desfase fijo de UTC se equivoca dos veces al año para quien todavía lo use así. Esta API de zonas horarias convierte una marca de tiempo entre zonas IANA usando las reglas de horario de verano reales y vigentes de cada región, para que la hora que envía sea la hora que realmente llega al otro lado.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué los desfases fijos son una trampa
Es tentador guardar 'UTC-5' junto a una marca de tiempo y darlo por resuelto, pero ese número solo es cierto durante parte del año en la mayor parte de Norteamérica y Europa, y nunca es cierto en Arizona o buena parte del hemisferio sur, donde el horario de verano no aplica o sigue un calendario opuesto. Peor aún, las reglas cambian: los gobiernos ajustan las fechas de inicio y fin, y a veces lo eliminan por completo, así que una tabla de desfases fija queda obsoleta sin que nadie lo note.
Qué calcula realmente POST /dev/timezone
Envía una marca de tiempo junto con un identificador de zona de origen y de destino, como America/New_York o Asia/Kolkata, y el endpoint devuelve un task_id mientras resuelve la conversión de forma asíncrona. Aplica el desfase correcto para esa fecha específica, así que una marca de julio y una de diciembre para la misma ciudad pueden convertirse de forma distinta, y maneja los casos límite alrededor de la propia transición, cuando el reloj salta una hora o la repite.
La historia detrás del desorden
El horario de verano fue adoptado de forma dispersa por distintos países durante el siglo veinte por razones energéticas y agrícolas que en su mayoría ya no aplican, y por eso las reglas actuales son un mosaico en lugar de un estándar global limpio. La base de datos de zonas horarias de IANA, la fuente en la que se apoya este endpoint, existe para rastrear ese mosaico a medida que los gobiernos lo modifican, y por eso se actualiza varias veces al año en lugar de ser una tabla fija.
Dónde necesitan esto realmente los sistemas automatizados
Las plataformas de reservas lo usan para mostrarle a un viajero la hora local correcta de llegada de un vuelo que aterriza en otra zona, las herramientas de calendario lo usan para mantener una reunión recurrente anclada a 'las 9am hora local' incluso cuando el horario de verano se desplaza a su alrededor, y los sistemas de registro lo usan para normalizar marcas de tiempo de servidores en distintas regiones antes del análisis. La entrega es mediante webhook firmado, ideal para un backend de programación que reacciona en tiempo real, o un enlace firmado válido por 24 horas para trabajos de conversión por lotes.
Costo y confiabilidad que escalan con el uso
A $0.002 por solicitud, convertir un puñado de marcas de tiempo o el calendario completo de un evento cuesta la misma tarifa predecible, y una tarea que falla se reintenta hasta tres veces antes de devolver un error claro, sin cobrarse si no logra completarse. No hay prueba gratuita ni plan gratuito; se requiere saldo prepago, lo que mantiene el endpoint ágil incluso bajo carga.
Qué puede hacer con ella
Mostrar horarios de vuelos y viajes
Convierta la marca de tiempo de salida a la hora local de la ciudad de llegada, considerando correctamente en qué lado de una transición de horario de verano se encuentra cada ciudad.
Programar reuniones recurrentes
Mantenga una llamada semanal anclada a las 9am en la zona local del organizador, aunque los asistentes de otras regiones entren y salgan del horario de verano en fechas distintas.
Normalizar registros de servidores en distintas regiones
Convierta marcas de tiempo de servidores distribuidos a una única zona de referencia antes de combinar los registros para análisis o líneas de tiempo de incidentes.
Localizar los horarios de pedidos en comercio electrónico
Muestre a los clientes la confirmación de su pedido y las estimaciones de entrega en su propia hora local, convertidas con precisión desde la zona de operación del almacén.
Preguntas frecuentes
¿En qué se diferencia esto de simplemente sumar o restar horas?
Un desfase fijo ignora el horario de verano, que cambia una hora dos veces al año en la mayoría de las regiones y sigue calendarios distintos según el país; esta API aplica la regla correcta para la fecha específica que envía, no un número estático.
¿Qué identificadores de zona horaria acepta?
Nombres de zona IANA estándar como America/New_York, Europe/Madrid o Asia/Tokyo, que identifican sin ambigüedad todas las reglas históricas y vigentes de horario de verano de una región, a diferencia de abreviaturas como EST o CST.
¿Maneja el momento exacto en que ocurre una transición de horario de verano?
Sí, incluidos los casos límite en los que el reloj salta una hora en primavera o repite una hora en otoño, de modo que las conversiones justo en el límite de la transición se mantienen precisas.
¿Existe una forma gratuita de probar la API de zonas horarias?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cuánto cuesta cada conversión?
Cada llamada a POST /dev/timezone cuesta $0.002, y se cobra únicamente cuando la tarea se completa con éxito.
¿Puedo convertir marcas de tiempo en lote?
Sí. El endpoint es asíncrono y los resultados se entregan mediante webhook firmado o un enlace firmado válido por 24 horas, lo que se ajusta a trabajos por lotes que convierten grandes conjuntos de marcas de tiempo sin necesidad de consultar el estado repetidamente.
¿Qué pasa si un país cambia sus reglas de horario de verano?
Los datos de zona horaria en los que se basa el servicio se mantienen actualizados conforme a los cambios oficiales de cada gobierno, así que las conversiones reflejan las reglas más recientes en lugar de una tabla fija y desactualizada.
¿Qué ocurre si mi solicitud falla o el identificador de zona no es válido?
La tarea se reintenta automáticamente hasta tres veces; si sigue sin poder completarse, recibe un error claro y no se le cobra.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/timezone \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/timezone", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/timezone",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/timezone", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/timezone", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.timezone",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |