2017-06-26 05:45:22 +08:00
|
|
|
package convert
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/pengsrc/go-shared/check"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Supported time layouts
|
|
|
|
const (
|
|
|
|
RFC822 = "Mon, 02 Jan 2006 15:04:05 GMT"
|
|
|
|
ISO8601 = "2006-01-02T15:04:05Z"
|
|
|
|
ISO8601Milli = "2006-01-02T15:04:05.000Z"
|
|
|
|
NGINXTime = "02/Jan/2006:15:04:05 -0700"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TimeToString transforms given time to string.
|
|
|
|
func TimeToString(timeValue time.Time, format string) string {
|
|
|
|
if check.StringSliceContains([]string{RFC822, ISO8601, ISO8601Milli}, format) {
|
|
|
|
timeValue = timeValue.UTC()
|
|
|
|
}
|
|
|
|
return timeValue.Format(format)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StringToTime transforms given string to time.
|
|
|
|
func StringToTime(timeString string, format string) (time.Time, error) {
|
|
|
|
result, err := time.Parse(format, timeString)
|
|
|
|
if timeString != "0001-01-01T00:00:00Z" {
|
|
|
|
zero := time.Time{}
|
|
|
|
if result == zero {
|
|
|
|
err = fmt.Errorf(`failed to parse "%s" like "%s"`, timeString, format)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// TimeToTimestamp transforms given time to unix time int.
|
|
|
|
func TimeToTimestamp(t time.Time) int64 {
|
2018-01-16 21:20:59 +08:00
|
|
|
zero := time.Time{}
|
|
|
|
if t == zero {
|
|
|
|
t = time.Unix(0, 0).UTC()
|
|
|
|
}
|
2017-06-26 05:45:22 +08:00
|
|
|
return t.Unix()
|
|
|
|
}
|
|
|
|
|
|
|
|
// TimestampToTime transforms given unix time int64 to time in UTC.
|
|
|
|
func TimestampToTime(unix int64) time.Time {
|
|
|
|
return time.Unix(unix, 0).UTC()
|
|
|
|
}
|
|
|
|
|
2018-06-18 00:59:12 +08:00
|
|
|
// TimestampToTimePointer transforms given unix time int64 to time pointer in UTC.
|
|
|
|
func TimestampToTimePointer(unix int64) *time.Time {
|
|
|
|
if unix == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
t := time.Unix(unix, 0).UTC()
|
|
|
|
return &t
|
|
|
|
}
|
|
|
|
|
|
|
|
// TimePointerToTimestamp transforms given time pointer to unix time int64.
|
|
|
|
func TimePointerToTimestamp(t *time.Time) int64 {
|
|
|
|
if t == nil {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
return t.Unix()
|
|
|
|
}
|
|
|
|
|
|
|
|
// StringToTimestamp transforms given string to unix time int64. It will
|
2017-06-26 05:45:22 +08:00
|
|
|
// return -1 when time string parse error.
|
2018-06-18 00:59:12 +08:00
|
|
|
func StringToTimestamp(timeString string, format string) int64 {
|
2017-06-26 05:45:22 +08:00
|
|
|
t, err := StringToTime(timeString, format)
|
|
|
|
if err != nil {
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
return t.Unix()
|
|
|
|
}
|
2018-06-18 00:59:12 +08:00
|
|
|
|
|
|
|
// TimestampToString converts unix timestamp to formatted string.
|
|
|
|
func TimestampToString(unix int64, format string) string {
|
|
|
|
return TimeToString(time.Unix(unix, 0).UTC(), format)
|
|
|
|
}
|