I was running into issues with comparing time.Time objects in a unit test that would pass on a CI server, but fail on my local machine. I wanted to see if anyone could double check my understanding of how `time.Parse` treats locations (I posted on Stack Overflow <http://stackoverflow.com/questions/39090669/golang-empty-location-on-mac-osx-when-parsing-time> about it if it's helpful to see), though I think I now understand why; I was initially confused by the fact that `time.Parse` wasn't setting "2017-08-15T22:30:00+00:00"'s timezone to be UTC, since the docs for `time.Parse` read: "In the absence of a time zone indicator, Parse returns a time in UTC."
I thought I was seeing inconsistencies with how an RFC 3339 time was interpreted on my local machine vs. on a CI server (and on the Go Playground), but came up with a few examples that may explain the behavior I was seeing. Please bear with my examples to see if I understand correctly! (1) "2017-08-15T22:30:00+00:00" is interpreted as having 0 hour offset. If the system's local time has a 0 hour offset (such as UTC), then the Location in the parsed time.Time value has UTC as its location string. If the system's local time has *any other* offset, then the Location has an empty string for its location string. This is suggested by this line in the docs <https://golang.org/pkg/time/#Parse> of Parse: When parsing a time with a zone offset like -0700, if the offset corresponds to a time zone used by the current location (Local), then Parse uses that location and zone in the returned time. Otherwise it records the time as being in a fabricated location with time fixed at the given zone offset. Since the CI server in question has its time set to UTC (as does the Go Playground), then UTC is set to be the location. Since my local machine does *not* have its timezone set to UTC, a "fabricated" location is set. (2) 2017-08-15T22:30:00Z is interpreted as being UTC no matter what; the Z carries both the fact that there is a 0 hour offset, and that it is in UTC. Parsing such a string works the same way on my local machine as our CI server and the Go Playground. Those two examples are shown here: https://play.golang.org/p/mYkMhS9sJT (with the output I see on my local machine included). If all of that is correct, I guess my last question is: is +00:00 supposed to imply UTC? I'm assuming someone else has thought harder about this before, but I was a little confused by the wording in RFC 3339 <https://tools.ietf.org/html/rfc3339#section-4.3> here: This differs semantically from an offset of "Z" or "+00:00", which imply that UTC is the preferred reference point for the specified time. If anyone can confirm, I'd greatly appreciate it - thanks for the help! -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.