代码拉取完成,页面将自动刷新
package gtools
import (
"database/sql/driver"
"fmt"
"time"
)
const (
//TimeZone ...
TimeZone = "Asia/Shanghai"
//Custom ...
Custom = "2006-01-02 15:04:05"
//DateLayout ...
//DateLayout = "2006-01-02"
)
//SetTimeZone ...Shanghai
func SetTimeZone() error {
lc, err := time.LoadLocation(TimeZone)
if err == nil {
time.Local = lc
}
return err
}
//JSONTime ...
type JSONTime time.Time
//Today ...今日日期
func Today() *JSONTime {
return JSONTime(time.Now()).Addr().Date()
}
//Now 当前时间
func Now() *JSONTime {
return JSONTime(time.Now()).Addr()
}
//NewJSONTimeOfTime 时间转换为JSONTime
func NewJSONTimeOfTime(t time.Time) *JSONTime {
return JSONTime(t).Addr()
}
//ToDatetime ...
func ToDatetime(in string) (JSONTime, error) {
out, err := time.ParseInLocation(Custom, in, time.Local)
return JSONTime(out), err
}
//Must2JSONTimeAddr maybe panic
func Must2JSONTimeAddr(in string) *JSONTime {
j, err := ToDatetime(in)
if err != nil {
panic(err)
}
return &j
}
//FromDB ...
func (p *JSONTime) FromDB(data []byte) error {
timeStd, _ := time.ParseInLocation(Custom, string(data), time.Local)
*p = JSONTime(timeStd)
return nil
}
//ToDB ...
func (p *JSONTime) ToDB() (b []byte, err error) {
b = []byte(p.String())
return
}
//SetByTime ...
func (p *JSONTime) SetByTime(timeVal time.Time) {
*p = JSONTime(timeVal)
}
//Time ...
func (p *JSONTime) Time() time.Time {
return p.Convert2Time()
}
//Date ...返回一个日期0点的时间
func (p *JSONTime) Date() *JSONTime {
y, m, d := p.Time().Date()
dt := time.Date(y, m, d, 0, 0, 0, 0, time.Local)
t := JSONTime(dt)
return &t
}
//Convert2Time ...
func (p *JSONTime) Convert2Time() time.Time {
return time.Time(*p).Local()
}
// Value insert timestamp into mysql need this function.
func (p *JSONTime) Value() (driver.Value, error) {
var zeroTime time.Time
var ti = p.Convert2Time()
if ti.UnixNano() == zeroTime.UnixNano() {
return nil, nil
}
return ti, nil
}
// Scan valueof time.Time
func (p *JSONTime) Scan(v interface{}) error {
value, ok := v.(time.Time)
if ok {
*p = JSONTime(value)
return nil
}
return fmt.Errorf("can not convert %v to timestamp", v)
}
// GobEncode implements the gob.GobEncoder interface.
func (p *JSONTime) GobEncode() ([]byte, error) {
return p.Convert2Time().MarshalBinary()
}
// GobDecode implements the gob.GobDecoder interface.
func (p *JSONTime) GobDecode(data []byte) error {
s := p.Convert2Time()
err := (&s).UnmarshalBinary(data)
if err != nil {
return err
}
*p = JSONTime(s)
return nil
}
//MarshalJSON ...
func (p *JSONTime) MarshalJSON() ([]byte, error) {
if time.Time(*p).IsZero() {
return []byte(`""`), nil
}
data := make([]byte, 0)
data = append(data, '"')
data = p.Convert2Time().AppendFormat(data, Custom)
data = append(data, '"')
return data, nil
}
//UnmarshalJSON ...
func (p *JSONTime) UnmarshalJSON(data []byte) error {
local, err := time.ParseInLocation(`"`+Custom+`"`, string(data), time.Local)
if err != nil {
*p = JSONTime(time.Time{})
}
*p = JSONTime(local)
return nil
}
//String ...
func (p *JSONTime) String() string {
return p.Convert2Time().Format(Custom)
}
//StringFormat 转换为固定格式字符串
func (p *JSONTime) StringFormat(layout string) string {
return p.Convert2Time().Format(layout)
}
//Addr ...
func (p JSONTime) Addr() *JSONTime {
return &p
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。