github.com/chain5j/chain5j-pkg@v1.0.7/util/dateutil/date.go (about)

     1  package dateutil
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/chain5j/logger"
     7  )
     8  
     9  /*
    10  前面是含义,后面是 go 的表示值,多种表示,逗号","分割
    11  年  06,2006
    12  月份 1,01,Jan,January
    13  日  2,02,_2
    14  时  3,03,15,PM,pm,AM,am
    15  分  4,04
    16  秒  5,05
    17  周几 Mon,Monday
    18  时区时差表示 -07,-0700,Z0700,Z07:00,-07:00,MST
    19  时区字母缩写 MST
    20  您看出规律了么!哦是的,你发现了,这里面没有一个是重复的,所有的值表示都唯一对应一个时间部分。
    21  并且涵盖了很多格式组合。
    22  */
    23  type DateFormat string
    24  
    25  const (
    26  	// 时间格式化字符串
    27  	Default               DateFormat = "2006-01-02 15:04:05"
    28  	YYYY                  DateFormat = "2006"
    29  	YYYY_MM               DateFormat = "2006-01"
    30  	YYYY_7MM              DateFormat = "2006/01"
    31  	YYYY_0MM              DateFormat = "2006.01"
    32  	YYYYMM                DateFormat = "200601"
    33  	YYYY_MM_dd            DateFormat = "2006-01-02"
    34  	YYYY_7MM_7dd          DateFormat = "2006/01/02"
    35  	YYYY_0MM_0dd          DateFormat = "2006.01.02"
    36  	YYYYMMdd              DateFormat = "20060102"
    37  	YYYY_MM_dd8HH0mm      DateFormat = "2006-01-02 15:04"
    38  	YYYY_7MM_7dd8HH0mm    DateFormat = "2006/01/02 15:04"
    39  	YYYY_0MM_0dd8HH0mm    DateFormat = "2006.01.02 15:04"
    40  	YYYYMMddHHmm          DateFormat = "200601021504"
    41  	YYYY_MM_dd8HH0mm0ss   DateFormat = "2006-01-02 15:04:05"
    42  	YYYY_7MM_7dd8HH0mm0ss DateFormat = "2006/01/02 15:04:05"
    43  	YYYY_0MM_0dd8HH0mm0ss DateFormat = "2006.01.02 15:04:05"
    44  	YYYYMMddHHmmss        DateFormat = "20060102150405"
    45  	HH0mm0ss              DateFormat = "15:04:05"
    46  )
    47  
    48  func (d DateFormat) String() string {
    49  	return string(d)
    50  }
    51  
    52  // 中国时区
    53  var SysTimeLocation, _ = time.LoadLocation("Asia/Chongqing")
    54  
    55  // CurrentTime 返回毫秒
    56  func CurrentTime() int64 {
    57  	return time.Now().UnixNano() / 1e6
    58  }
    59  
    60  // CurrentTimeSecond 返回秒
    61  func CurrentTimeSecond() int64 {
    62  	return time.Now().Unix()
    63  }
    64  
    65  // CurrentTimeDay 返回day的时间戳
    66  func CurrentTimeDay() int64 {
    67  	return time.Now().UnixNano() / Day.Nanoseconds()
    68  }
    69  
    70  // NanoToMillisecond 纳秒转毫秒
    71  func NanoToMillisecond(t int64) int64 {
    72  	return t / 1e6
    73  }
    74  
    75  // NanoToSecond 纳秒转秒
    76  func NanoToSecond(t int64) int64 {
    77  	return t / 1e9
    78  }
    79  
    80  // 秒转time
    81  func SecondToTime(t int64) time.Time {
    82  	return time.Unix(t, 0)
    83  }
    84  
    85  func MillisecondToTime(t int64) time.Time {
    86  	return time.Unix(0, t*1e6)
    87  }
    88  func NanoToTime(t int64) time.Time {
    89  	return time.Unix(0, t)
    90  }
    91  
    92  // 格式化输出
    93  func Format(t time.Time, format DateFormat) string {
    94  	return t.Format(format.String())
    95  }
    96  
    97  // 秒转成format
    98  func SecondFormat(t int64, format DateFormat) string {
    99  	return Format(SecondToTime(t), format)
   100  }
   101  
   102  // 时间转本地化
   103  // s时间格式:如"2017-05-11 14:06:06"
   104  // format:格式
   105  // location:时区(Location)
   106  func ParseInLocation(s string, format DateFormat, location *time.Location) {
   107  	// func ParseInLocation(layout, value string, loc *Location) (Time, error) (layout已带时区时可直接用Parse)
   108  	time.ParseInLocation(format.String(), s, location)
   109  }
   110  
   111  func LoadLocation(loc string) *time.Location {
   112  	// 默认UTC
   113  	// loc, err := time.LoadLocation("")
   114  	// // 服务器设定的时区,一般为CST
   115  	// loc, err := time.LoadLocation("Local")
   116  	// // 美国洛杉矶PDT
   117  	// loc, err := time.LoadLocation("America/Los_Angeles")
   118  	//
   119  	// // 获取指定时区的时间点
   120  	// local, _ := time.LoadLocation("America/Los_Angeles")
   121  	// fmt.Println(time.Date(2018,1,1,12,0,0,0, local))
   122  	location, e := time.LoadLocation(loc)
   123  	if e != nil {
   124  		logger.Error("loadLocation err", "err", e)
   125  		location, _ = time.LoadLocation("")
   126  		return location
   127  	}
   128  	return location
   129  }