Maison >développement back-end >Golang >Comment détecter le changement de fuseau horaire avec Golang ?
Le langage Go fournit une méthode pour détecter les changements de fuseau horaire : Charger l'emplacement initial du fuseau horaire : Utilisez time.LoadLocation pour charger la valeur *time.Location du fuseau horaire spécifié. Recharger périodiquement la position du fuseau horaire : Rechargez périodiquement la position du fuseau horaire, soit en boucle, soit à l'aide d'un timer, et comparez-la à la position initiale. Détecter les changements : si l'emplacement nouvellement chargé est différent de l'emplacement initial, le fuseau horaire a changé.
Comment détecter un changement de fuseau horaire avec Go ?
Dans les systèmes distribués, les changements de fuseau horaire peuvent entraîner des incohérences et des erreurs. Le langage Go fournit de puissantes bibliothèques pour gérer les fuseaux horaires, notamment la possibilité de détecter les changements de fuseau horaire.
Utilisez la fonction time.LoadLocation
time.LoadLocation
time.LoadLocation
函数加载指定时区的位置,并返回 *time.Location
time.LoadLocation
pour charger l'emplacement dans le fuseau horaire spécifié et renvoyer le *time.Location code> valeur. Cette valeur contient le décalage du fuseau horaire, le nom abrégé et d'autres informations. Pour détecter les changements de fuseau horaire, suivez les étapes suivantes : <li><p></p></li>Chargez la position initiale du fuseau horaire : <li><pre class='brush:go;toolbar:false;'>location, err := time.LoadLocation("America/New_York")
if err != nil {
// 处理错误
}</pre><p></p>
</li> Rechargez périodiquement la position du fuseau horaire en boucle :
for { // 等待一段时间(例如每 10 分钟) updatedLocation, err := time.LoadLocation("America/New_York") if err != nil { // 处理错误 } // 比较新旧时区位置 if updatedLocation != location { // 时区已更改 } // 更新时区位置以供以后使用 location = updatedLocation }
Utilisez un minuteur
Une autre approche consiste à utiliser une minuterie pour recharger périodiquement l'emplacement du fuseau horaire : // 创建一个计时器,每隔 10 分钟触发
timer := time.NewTimer(10 * time.Minute)
for {
select {
case <-timer.C:
// 重新加载时区位置
location, err := time.LoadLocation("America/New_York")
if err != nil {
// 处理错误
}
// 比较新旧时区位置
if updatedLocation != location {
// 时区已更改
}
// 更新时区位置以供以后使用
location = updatedLocation
// 重置计时器以再次触发
timer.Reset(10 * time.Minute)
}
}
// API 服务器代码 package main import ( "context" "fmt" "log" "net/http" "sync" "time" "github.com/gorilla/mux" ) var ( mu sync.Mutex cache map[string]*time.Location ) func main() { cache = make(map[string]*time.Location) go loadLocations(context.Background()) r := mux.NewRouter() r.HandleFunc("/{timezone}", getTime).Methods(http.MethodGet) log.Fatal(http.ListenAndServe(":8080", r)) } func getTime(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) timezone := vars["timezone"] mu.Lock() location, ok := cache[timezone] mu.Unlock() if !ok { w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Invalid timezone: %s", timezone) return } now := time.Now().In(location) fmt.Fprintf(w, "Current time in %s: %s", timezone, now.Format("Mon, 02 Jan 2006 15:04 MST")) } func loadLocations(ctx context.Context) { for { select { case <-ctx.Done(): return default: mu.Lock() for _, location := range time.AvailableLocations() { cache[location] = time.LoadLocation(location) } mu.Unlock() time.Sleep(10 * time.Minute) } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!