One of the examples from the lubridate documentation illustrates how the parser can handle several variations on time zone offset formats, too:
## ** different formats for ISO8601 timezone offset **
ymd_hms(c("2013-01-24 19:39:07.880-0600",
"2013-01-24 19:39:07.880", "2013-01-24 19:39:07.880-06:00",
"2013-01-24 19:39:07.880-06", "2013-01-24 19:39:07.880Z"))
#> [1] "2013-01-25 01:39:07.88 UTC" "2013-01-24 19:39:07.88 UTC"
#> [3] "2013-01-25 01:39:07.88 UTC" "2013-01-25 01:39:07.88 UTC"
#> [5] "2013-01-24 19:39:07.88 UTC"