Maison > développement back-end > Golang > le corps du texte

Comment détecter le changement de fuseau horaire avec Golang ?

WBOY
Libérer: 2024-06-02 22:17:00
original
990 Les gens l'ont consulté

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é.

如何用 Golang 检测时区更改?

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.LoadLocationtime.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><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>location, err := time.LoadLocation(&quot;America/New_York&quot;) if err != nil { // 处理错误 }</pre><div class="contentsignin">Copier après la connexion</div></div><p></p></li> Rechargez périodiquement la position du fuseau horaire en boucle : </ol><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>for { // 等待一段时间(例如每 10 分钟) updatedLocation, err := time.LoadLocation(&quot;America/New_York&quot;) if err != nil { // 处理错误 } // 比较新旧时区位置 if updatedLocation != location { // 时区已更改 } // 更新时区位置以供以后使用 location = updatedLocation }</pre><div class="contentsignin">Copier après la connexion</div></div><p><strong></strong></p>Utilisez un minuteur <p></p> <p>Une autre approche consiste à utiliser une minuterie pour recharger périodiquement l'emplacement du fuseau horaire : <strong><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>// 创建一个计时器,每隔 10 分钟触发 timer := time.NewTimer(10 * time.Minute) for { select { case &lt;-timer.C: // 重新加载时区位置 location, err := time.LoadLocation(&quot;America/New_York&quot;) if err != nil { // 处理错误 } // 比较新旧时区位置 if updatedLocation != location { // 时区已更改 } // 更新时区位置以供以后使用 location = updatedLocation // 重置计时器以再次触发 timer.Reset(10 * time.Minute) } }</pre><div class="contentsignin">Copier après la connexion</div></div></strong></p> Cas pratique <p></p>🎜 Considérons un serveur API qui doit afficher des informations en fonction du fuseau horaire de l'utilisateur. Les changements de fuseau horaire peuvent entraîner l’affichage d’informations obsolètes ou incorrectes. En détectant périodiquement les changements de fuseau horaire, le serveur peut mettre à jour son emplacement et garantir son exactitude. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>// API 服务器代码 package main import ( &quot;context&quot; &quot;fmt&quot; &quot;log&quot; &quot;net/http&quot; &quot;sync&quot; &quot;time&quot; &quot;github.com/gorilla/mux&quot; ) 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(&quot;/{timezone}&quot;, getTime).Methods(http.MethodGet) log.Fatal(http.ListenAndServe(&quot;:8080&quot;, r)) } func getTime(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) timezone := vars[&quot;timezone&quot;] mu.Lock() location, ok := cache[timezone] mu.Unlock() if !ok { w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, &quot;Invalid timezone: %s&quot;, timezone) return } now := time.Now().In(location) fmt.Fprintf(w, &quot;Current time in %s: %s&quot;, timezone, now.Format(&quot;Mon, 02 Jan 2006 15:04 MST&quot;)) } func loadLocations(ctx context.Context) { for { select { case &lt;-ctx.Done(): return default: mu.Lock() for _, location := range time.AvailableLocations() { cache[location] = time.LoadLocation(location) } mu.Unlock() time.Sleep(10 * time.Minute) } } }</pre><div class="contentsignin">Copier après la connexion</div></div></li>

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!