From 2b8f160b9ebafb3b93532195494a9b58425e43f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Sat, 29 Jun 2024 11:57:45 +0200 Subject: [PATCH] Accept +0200 timezone --- helper.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/helper.go b/helper.go index 0d9731d..9b11f15 100644 --- a/helper.go +++ b/helper.go @@ -6,10 +6,36 @@ import ( // 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) {