Zonas horarias
Trabaje con ubicaciones
Zonas horarias es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
El tiempo incluye una zona horaria
Cada time.Time tiene una ubicación asociada (zona horaria). El mismo instante puede mostrarse de forma diferente según la zona.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.Location())
}UTC y Local
Hay dos ubicaciones integradas que siempre están disponibles:
time.UTCpara el tiempo universal coordinado.time.Localpara la zona local de la máquina.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.UTC().Hour())
}Cargar una zona con nombre
time.LoadLocation(name) busca una zona IANA, como "Europe/Istanbul" o "America/New_York".
package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("UTC")
fmt.Println(loc, err)
}Convertir zonas con In
t.In(loc) devuelve el mismo instante mostrado en una zona diferente. El momento subyacente no cambia; solo cambia su presentación.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(time.UTC).Hour())
}Mismo instante, relojes diferentes
El mediodía UTC es un único instante, pero un observador en otra zona ve una hora diferente en su reloj. La diferencia obtenida con Sub entre ambos es cero.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
u := t.UTC()
fmt.Println(t.Sub(u))
}Crear tiempo en una zona
Pase una ubicación como último argumento de time.Date para crear un valor de tiempo directamente en esa zona.
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("UTC")
t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
fmt.Println(t.Hour())
}Leer el desfase de la zona
t.Zone() devuelve la abreviatura de la zona y su desfase respecto a UTC en segundos.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
name, offset := t.Zone()
fmt.Println(name, offset)
}Zonas fijas
Cuando no necesita todas las reglas de IANA, time.FixedZone(name, offsetSeconds) crea una zona sencilla con un desfase constante.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
name, off := t.Zone()
fmt.Println(name, off)
}Dar formato en distintas zonas
Convierta el valor con In antes de darle formato para mostrar una marca de tiempo en la zona del lector.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Almacenar en UTC y mostrar en local
Una regla muy utilizada es la siguiente: almacene y realice los cálculos en UTC, y convierta a una zona local solo al mostrar las horas a los usuarios. Así evitará ambigüedades.
package main
import (
"fmt"
"time"
)
func main() {
stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT+2", 2*3600)
fmt.Println("shown:", stored.In(loc).Hour())
}Gestionar errores de carga
LoadLocation puede fallar si falta la base de datos de zonas o si el nombre es desconocido. Compruebe siempre el error.
package main
import (
"fmt"
"time"
)
func main() {
_, err := time.LoadLocation("Mars/Olympus")
if err != nil {
fmt.Println("unknown zone")
}
}Comprobación rápida
¿Qué cambia t.In(loc)?
Repaso: zonas horarias
Ha aprendido a trabajar con ubicaciones:
- Cada valor de tiempo tiene una ubicación;
UTCyLocalestán integradas. - Cargue zonas con nombre mediante
LoadLocationo cree desfases conFixedZone. - Convierta con
In; almacene en UTC y muestre en la zona local.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT-5", -5*3600)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Aprende Go con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Zonas horarias» es gratis?
Sí — el texto completo de «Zonas horarias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Zonas horarias»?
Trabaje con ubicaciones Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Zonas horarias»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.