Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

time: time.Sub returns different results depending on Location (on both Windows and Linux) #3620

gopherbot opened this issue May 14, 2012 · 2 comments


Copy link

@gopherbot gopherbot commented May 14, 2012

by pkorotkov:

What steps will reproduce the problem?
This code does not work in Go Playground as-is, so just put it right there:

// DatesDiff returns the number of days and seconds resp. between two given dates
func DatesDiff(t1, t2 time.Time) (int, int64) {
    v := int64(t2.Sub(t1))
    return int(v / 864e11), v / 1e9

func main() {
    loc, err := time.LoadLocation("Europe/Berlin")
    if err != nil {
    t1 := time.Date(1957, time.September, 10, 0, 0, 0, 0, loc)
    t2 := time.Date(2013, time.May, 14, 0, 0, 0, 0, loc)
    fmt.Println(DatesDiff(t1, t2))
    t3 := time.Date(1957, time.September, 10, 0, 0, 0, 0, time.UTC)
    t4 := time.Date(2013, time.May, 14, 0, 0, 0, 0, time.UTC)
    fmt.Println(DatesDiff(t3, t4))

What is the expected output?

20335 1756944000

20335 1756944000

What do you see instead?
20334 1756940400

20335 1756944000

Which compiler are you using (5g, 6g, 8g, gccgo)?

Which operating system are you using?
Windows 7 Prof x86
Ubuntu Linux 12.04 LTS x86

Which version are you using?  (run 'go version')
go version go1.0.1

Please provide any additional information below.
Copy link

@remyoudompheng remyoudompheng commented May 15, 2012

Comment 1:

Daylight saving time was not observed in Germany in 1957:
In your first example, you are computing the difference between "09 Sep 1957 23:00 UTC"
and "14 May 2013 22:00 UTC", which is one hour less than your second example. You should
take that into account if you need to compute *date* differences. Package time cares
about time.
Copy link

@ianlancetaylor ianlancetaylor commented May 15, 2012

Comment 2:

Sounds like all is well here, or at least what is not well is not Go's fault.

Status changed to WorkingAsIntended.

@golang golang locked and limited conversation to collaborators Jun 24, 2016
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.