2016-12-26 2 views
1

Die standardmäßige time.Duration String-Methode formatiert die Dauer mit dem Hinzufügen von 0s für Minuten und 0m0s für Stunden. Gibt es Funktion, die ich verwenden kann, die 5m statt und 2h stattdessen 2h0m0s produzieren ... oder muss ich meine eigene implementieren?golang Zeitdauer auf String 2h statt 2h0m0s

Antwort

3

in der Standardbibliothek nicht, aber es ist wirklich einfach zu erstellen:

func shortDur(d time.Duration) string { 
    s := d.String() 
    if strings.HasSuffix(s, "m0s") { 
     s = s[:len(s)-2] 
    } 
    if strings.HasSuffix(s, "h0m") { 
     s = s[:len(s)-2] 
    } 
    return s 
} 

Testing es:

h, m, s := 5*time.Hour, 4*time.Minute, 3*time.Second 
ds := []time.Duration{ 
    h + m + s, h + m, h + s, m + s, h, m, s, 
} 

for _, d := range ds { 
    fmt.Printf("%-8v %v\n", d, shortDur(d)) 
} 

Output (versuchen Sie es auf dem Go Playground):

5h4m3s 5h4m3s 
5h4m0s 5h4m 
5h0m3s 5h0m3s 
4m3s  4m3s 
5h0m0s 5h 
4m0s  4m 
3s  3s 
1

Sie können die Dauer einfach wie folgt abrunden:

 func RountTime(roundTo string, value time.Time) string { 
      since := time.Since(value) 
      if roundTo == "h" { 
       since -= since % time.Hour 
      } 
      if roundTo == "m" { 
       since -= since % time.Minute 
      } 
      if roundTo == "s" { 
       since -= since % time.Second 
      } 
      return since.String() 
     } 
Verwandte Themen