Maison >développement back-end >Golang >Comment obtenir une plage de dates à partir d'un numéro de semaine dans Go ?

Comment obtenir une plage de dates à partir d'un numéro de semaine dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-08 07:52:12942parcourir

How to Get a Date Range from a Week Number in Go?

Plage de dates par numéro de semaine en Golang

Introduction

Déterminer la plage de dates correspondant à un numéro de semaine donné peut être une exigence courante dans de nombreuses applications. Bien que Golang fournisse une fonction pratique pour obtenir le numéro de la semaine, il lui manque un mécanisme intégré pour récupérer la plage de dates correspondante. Cet article présente une solution Golang pratique pour résoudre ce problème.

Implémentation de fonctions personnalisées

Pour établir la plage de dates d'une semaine spécifique, nous devons effectuer les étapes suivantes :

  1. Align to Monday : Lorsque Time.ISOWeek() s'aligne sur lundi, nous commençons par définir l'heure actuelle au premier lundi de l'année.
  2. Trouver le numéro de la semaine : calculez le numéro de la semaine de cette période à l'aide de Time.ISOWeek().
  3. Ajuster pour la semaine Différence : Déterminez la différence entre le numéro de la semaine cible et le numéro de la semaine en cours et ajustez l'heure en conséquence.

Sur la base de ceux-ci principes, nous pouvons créer une fonction personnalisée appelée WeekStart() comme suit :

func WeekStart(year, week int) time.Time {
    // Start from middle of the year
    t := time.Date(year, 7, 1, 0, 0, 0, 0, time.UTC)

    // Align to Monday
    if t.Weekday() == time.Sunday {
        t = t.AddDate(0, 0, -6)
    } else {
        t = t.AddDate(0, 0, -int(t.Weekday())+1)
    }

    // Adjust for week difference
    y, w := t.ISOWeek()
    t = t.AddDate(0, 0, (week-w)*7)

    return t
}

Utilisation et exemple

Pour utiliser cette fonction, indiquez l'année et l'année souhaitée. numéro de la semaine comme arguments :

fmt.Println(WeekStart(2018, 1)) // Output: 2018-01-01 00:00:00 +0000 UTC
fmt.Println(WeekStart(2018, 2)) // Output: 2018-01-08 00:00:00 +0000 UTC

Récupération du dernier jour du Semaine

Si nous avons besoin à la fois du premier et du dernier jour de la semaine, nous pouvons étendre la fonction pour renvoyer la date de fin :

func WeekRange(year, week int) (start, end time.Time) {
    start = WeekStart(year, week)
    end = start.AddDate(0, 0, 6)
    return
}

Cette fonction étendue permet l'utilisation suivante :

fmt.Println(WeekRange(2018, 1)) // Output: 2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC
fmt.Println(WeekRange(2018, 2)) // Output: 2018-01-08 00:00:00 +0000 UTC 2018-01-14 00:00:00 +0000 UTC

Cette implémentation personnalisée vous permet de récupérer sans effort la plage de dates correspondant à un numéro de semaine donné, ce qui en fait un outil inestimable pour les manipulations de calendrier et l'analyse des données dans Golang candidatures.

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!

Déclaration:
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