diff --git a/pkg/caldav/caldav.go b/pkg/caldav/caldav.go index f58bb9c570..067a50baef 100644 --- a/pkg/caldav/caldav.go +++ b/pkg/caldav/caldav.go @@ -27,7 +27,7 @@ import ( "code.vikunja.io/api/pkg/utils" ) -// DateFormat ist the caldav date format +// DateFormat is the caldav date format const DateFormat = `20060102T150405` // Event holds a single caldav event diff --git a/pkg/routes/caldav/parsing.go b/pkg/routes/caldav/parsing.go index 455e38d716..547f717e67 100644 --- a/pkg/routes/caldav/parsing.go +++ b/pkg/routes/caldav/parsing.go @@ -18,6 +18,7 @@ package caldav import ( "strconv" + "strings" "time" "code.vikunja.io/api/pkg/caldav" @@ -111,12 +112,19 @@ func parseTaskFromVTODO(content string) (vTask *models.Task, err error) { return } +// https://tools.ietf.org/html/rfc5545#section-3.3.5 func caldavTimeToTimestamp(tstring string) time.Time { if tstring == "" { return time.Time{} } - t, err := time.Parse(caldav.DateFormat, tstring) + format := caldav.DateFormat + + if strings.HasSuffix(tstring, "Z") { + format = `20060102T150405Z` + } + + t, err := time.Parse(format, tstring) if err != nil { log.Warningf("Error while parsing caldav time %s to TimeStamp: %s", tstring, err) return time.Time{}