]> source.dussan.org Git - gitea.git/commitdiff
fix timezone!
authorUnknwon <u@gogs.io>
Wed, 19 Aug 2015 16:56:12 +0000 (00:56 +0800)
committerUnknwon <u@gogs.io>
Wed, 19 Aug 2015 16:56:12 +0000 (00:56 +0800)
models/action.go
models/issue.go
models/models.go

index 2c08eebbd98c989559fb2f0a6398d5509c038178..2beb42e576319348befa388544768592439d2bd1 100644 (file)
@@ -82,8 +82,7 @@ type Action struct {
 func (a *Action) AfterSet(colName string, _ xorm.Cell) {
        switch colName {
        case "created":
-               now := time.Now()
-               a.Created = a.Created.Add(now.Sub(now.UTC()))
+               a.Created = regulateTimeZone(a.Created)
        }
 }
 
index 5e5c79c2e5d235cae5d88102ed7d872336d65ed3..d8c4809f11dd54ae7aac6279f9107f306fc0b08d 100644 (file)
@@ -93,8 +93,7 @@ func (i *Issue) AfterSet(colName string, _ xorm.Cell) {
                        log.Error(3, "GetUserByID[%d]: %v", i.ID, err)
                }
        case "created":
-               now := time.Now()
-               i.Created = i.Created.Add(now.Sub(now.UTC()))
+               i.Created = regulateTimeZone(i.Created)
        }
 }
 
@@ -1360,8 +1359,7 @@ func (c *Comment) AfterSet(colName string, _ xorm.Cell) {
                        }
                }
        case "created":
-               now := time.Now()
-               c.Created = c.Created.Add(now.Sub(now.UTC()))
+               c.Created = regulateTimeZone(c.Created)
        }
 }
 
index e06d5cf88ec11a44a5ee4e3d1544376c53671501..7d02bb956515b8e09fb7f92114c507cbe8d5a166 100644 (file)
@@ -10,7 +10,9 @@ import (
        "os"
        "path"
        "strings"
+       "time"
 
+       "github.com/Unknwon/com"
        _ "github.com/go-sql-driver/mysql"
        "github.com/go-xorm/core"
        "github.com/go-xorm/xorm"
@@ -40,6 +42,25 @@ func sessionRelease(sess *xorm.Session) {
        sess.Close()
 }
 
+// Note: get back time.Time from database Go sees it at UTC where they are really Local.
+//     So this function makes correct timezone offset.
+func regulateTimeZone(t time.Time) time.Time {
+       if setting.UseSQLite3 {
+               return t
+       }
+
+       zone := t.Local().Format("-0700")
+       if len(zone) != 5 {
+               return t
+       }
+       offset := com.StrTo(zone[2:3]).MustInt()
+
+       if zone[0] == '-' {
+               return t.Add(time.Duration(offset) * time.Hour)
+       }
+       return t.Add(-1 * time.Duration(offset) * time.Hour)
+}
+
 var (
        x         *xorm.Engine
        tables    []interface{}