Last active
January 23, 2024 02:50
-
-
Save bsphere/8369aca6dde3e7b4392c to your computer and use it in GitHub Desktop.
UNIX timestamps in Golang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package timestamp | |
import ( | |
"fmt" | |
"labix.org/v2/mgo/bson" | |
"strconv" | |
"time" | |
) | |
type Timestamp time.Time | |
func (t *Timestamp) MarshalJSON() ([]byte, error) { | |
ts := time.Time(*t).Unix() | |
stamp := fmt.Sprint(ts) | |
return []byte(stamp), nil | |
} | |
func (t *Timestamp) UnmarshalJSON(b []byte) error { | |
ts, err := strconv.Atoi(string(b)) | |
if err != nil { | |
return err | |
} | |
*t = Timestamp(time.Unix(int64(ts), 0)) | |
return nil | |
} | |
func (t Timestamp) GetBSON() (interface{}, error) { | |
if time.Time(*t).IsZero() { | |
return nil, nil | |
} | |
return time.Time(*t), nil | |
} | |
func (t *Timestamp) SetBSON(raw bson.Raw) error { | |
var tm time.Time | |
if err := raw.Unmarshal(&tm); err != nil { | |
return err | |
} | |
*t = Timestamp(tm) | |
return nil | |
} | |
func (t *Timestamp) String() string { | |
return time.Time(*t).String() | |
} |
Thank you for this... was writing the same thing and stumbled across this.
👍
func (t *Timestamp) Time() time.Time {
return time.Time(*t)
}
How do you then create a new instance of a Timestamp? Using the time.Now() method for example?
This function help me a lot! Thanks you so much.
func (t *Timestamp) SetBSON(raw bson.Raw) error {
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Embedding the time.Time structure you can use the Timetamp struct like the original one