12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package timeutil
- import (
- "math"
- "net/http"
- "time"
- )
- var (
- cst *time.Location
- )
- // CSTLayout China Standard Time Layout
- const CSTLayout = "2006-01-02 15:04:05"
- func init() {
- var err error
- if cst, err = time.LoadLocation("Asia/Shanghai"); err != nil {
- panic(err)
- }
- // 默认设置为中国时区
- time.Local = cst
- }
- // RFC3339ToCSTLayout convert rfc3339 value to china standard time layout
- // 2020-11-08T08:18:46+08:00 => 2020-11-08 08:18:46
- func RFC3339ToCSTLayout(value string) (string, error) {
- ts, err := time.Parse(time.RFC3339, value)
- if err != nil {
- return "", err
- }
- return ts.In(cst).Format(CSTLayout), nil
- }
- // CSTLayoutString 格式化时间
- // 返回 "2006-01-02 15:04:05" 格式的时间
- func CSTLayoutString() string {
- ts := time.Now()
- return ts.In(cst).Format(CSTLayout)
- }
- // ParseCSTInLocation 格式化时间
- func ParseCSTInLocation(date string) (time.Time, error) {
- return time.ParseInLocation(CSTLayout, date, cst)
- }
- // CSTLayoutStringToUnix 返回 unix 时间戳
- // 2020-01-24 21:11:11 => 1579871471
- func CSTLayoutStringToUnix(cstLayoutString string) (int64, error) {
- stamp, err := time.ParseInLocation(CSTLayout, cstLayoutString, cst)
- if err != nil {
- return 0, err
- }
- return stamp.Unix(), nil
- }
- // GMTLayoutString 格式化时间
- // 返回 "Mon, 02 Jan 2006 15:04:05 GMT" 格式的时间
- func GMTLayoutString() string {
- return time.Now().In(cst).Format(http.TimeFormat)
- }
- // ParseGMTInLocation 格式化时间
- func ParseGMTInLocation(date string) (time.Time, error) {
- return time.ParseInLocation(http.TimeFormat, date, cst)
- }
- // SubInLocation 计算时间差
- func SubInLocation(ts time.Time) float64 {
- return math.Abs(time.Now().In(cst).Sub(ts).Seconds())
- }
|