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.

Reply via email to