github.com/rothwerx/packer@v0.9.0/communicator/winrm/time.go (about) 1 package winrm 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 // formatDuration formats the given time.Duration into an ISO8601 9 // duration string. 10 func formatDuration(duration time.Duration) string { 11 // We're not supporting negative durations 12 if duration.Seconds() <= 0 { 13 return "PT0S" 14 } 15 16 h := int(duration.Hours()) 17 m := int(duration.Minutes()) - (h * 60) 18 s := int(duration.Seconds()) - (h*3600 + m*60) 19 20 res := "PT" 21 if h > 0 { 22 res = fmt.Sprintf("%s%dH", res, h) 23 } 24 if m > 0 { 25 res = fmt.Sprintf("%s%dM", res, m) 26 } 27 if s > 0 { 28 res = fmt.Sprintf("%s%dS", res, s) 29 } 30 31 return res 32 }