package main import ( // External werr "git.gibonuddevalla.se/go/wrappederror" // Standard "time" "regexp" ) var rxpTimezone *regexp.Regexp func init() { rxpTimezone = regexp.MustCompile(`(\d\d)(\d\d)$`) } func stringToTime(strTime string) (t time.Time, err error) {// {{{ // `date` command %z gives timezone like +0200 instead of +02:00. // This can easily be fixed here, not requiring all scripts to be fixed. t, err = time.Parse(time.RFC3339, strTime) if err != nil { // Check for aforementioned problem. parseError, ok := err.(*time.ParseError) if ok && parseError != nil && parseError.LayoutElem == "Z07:00" { // Insert the missing colon according to RFC 3339 and try again. patchedTimeStr := rxpTimezone.ReplaceAllString(strTime, `$1:$2`) t, err = time.Parse(time.RFC3339, patchedTimeStr) } // Couldn't convert to time.ParseError or the retry // failed. Either way, an error occurs. if err != nil { err = werr.Wrap(err).WithData(strTime) return } } return }// }}} func parseHTMLDateTime(str string, dflt time.Time) (t time.Time, err error) { // Browser sending 2024-06-27T10:43 (16 characters) when seconds is 00. if len(str) == 16 { str += ":00" } if str == "" { return dflt, nil } else { t, err = time.ParseInLocation("2006-01-02T15:04:05", str, smonConfig.Timezone()) if err != nil { err = werr.Wrap(err) } } return }