2016-12-26 4 views
1

デフォルトのtime.Duration文字列メソッドでは、分単位で0sを、時には0m0sを加算して長さをフォーマットします。代わりにを生成する機能を利用できますか?2h0m0sの代わりに5m0s2h ...または自分で実装する必要がありますか?golang時間の長さを2h0m0sの代わりに2h0m0s

標準ライブラリの

答えて

3

はないが、それは1を作成するのはとても簡単です:

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 
} 

テストそれ:

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)) 
} 

出力(Go Playground)上でそれを試してみてください。

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

次のように期間を丸めることができます:

 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() 
     } 
関連する問題