Comparaison des dates et des heures dans Go
Lors du tri des données en fonction de la date et de l'heure, il est essentiel d'effectuer des comparaisons précises. Go propose des options robustes pour la manipulation de la date et de l'heure via son package time.
Le package time propose plusieurs méthodes de comparaison instantanée : Avant, Après et Égal. En comparant deux instants temporels, vous pouvez établir leur relation temporelle. De plus, la méthode Sub calcule la durée entre deux instants, tandis que la méthode Add vous permet d'ajouter une durée à une heure, ce qui donne une nouvelle heure.
Comparaisons instantanées de temps
Par exemple, considérons l'exemple suivant :
package main import ( "fmt" "time" ) func main() { start, _ := time.Parse(time.RFC822, "01 Jan 15 10:00 UTC") end, _ := time.Parse(time.RFC822, "01 Jan 16 10:00 UTC") in, _ := time.Parse(time.RFC822, "01 Jan 15 20:00 UTC") out, _ := time.Parse(time.RFC822, "01 Jan 17 10:00 UTC") if in.Before(end) && in.After(start) { fmt.Println(in, "is between", start, "and", end, ".") } if !in.Before(end) || !in.After(start) { fmt.Println(out, "is not between", start, "and", end, ".") } }
Dans cet exemple, nous analysons deux instants temporels, début et fin, représentant une heure gamme. Nous analysons ensuite deux instants supplémentaires, d'entrée et de sortie, pour vérifier s'ils se situent dans la plage spécifiée. En comparant les instants à l'aide des méthodes Avant et Après, nous pouvons vérifier si une heure donnée se situe dans l'intervalle de temps souhaité.
Validation de la plage horaire
Dans les cas où la date les plages se croisent au fil des jours, comme mentionné dans la question, vous devrez peut-être envisager des vérifications supplémentaires. Voici un exemple qui montre comment gérer de tels scénarios :
package main import ( "fmt" "time" ) func inTimeSpan(start, end, check time.Time) bool { if start.After(end) { return check.After(start) || check.Before(end) } return check.After(start) && check.Before(end) } func main() { start, _ := time.Parse(time.RFC822, "01 Jan 15 22:00 UTC") end, _ := time.Parse(time.RFC822, "01 Jan 16 04:59 UTC") in, _ := time.Parse(time.RFC822, "01 Jan 16 02:00 UTC") out, _ := time.Parse(time.RFC822, "01 Jan 17 10:00 UTC") if inTimeSpan(start, end, in) { fmt.Println(in, "is within the time range from", start, "to", end, ".") } if !inTimeSpan(start, end, out) { fmt.Println(out, "is not within the time range from", start, "to", end, ".") } }
Dans cet exemple, la fonction inTimeSpan gère les plages de temps qui s'étendent sur plusieurs jours en considérant la possibilité que l'heure de début puisse être supérieure à l'heure de fin. Il ajuste la comparaison en conséquence et détermine avec précision si l'heure de vérification se situe dans la plage de temps spécifiée.
En utilisant le package de temps et ses méthodes de comparaison de date et d'heure, vous pouvez trier et filtrer efficacement les données en fonction de l'heure et intervalles de dates dans Go.
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!