golang基础--时间戳、日期的应用实例

简介

时间可分为时间点与时间段,golang 也不例外,提供了以下两种基础类型

  • 时间点(Time)
  • 时间段(Duration)

常用方法

获取和时间处理方法

   // func Now() Time
   fmt.Println(time.Now())

   // func Parse(layout, value string) (Time, error)
   time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")

   // func ParseInLocation(layout, value string, loc *Location) (Time, error) 
   // (layout已带时区时可直接用Parse)
   time.ParseInLocation("2006-01-02 15:04:05", "2017-05-11 14:06:06", time.Local)

   // func Unix(sec int64, nsec int64) Time
   time.Unix(1e9, 0)

   // func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
   time.Date(2018, 1, 2, 15, 30, 10, 0, time.Local)

   // func (t Time) In(loc *Location) Time 当前时间对应指定时区的时间
   loc, _ := time.LoadLocation("America/Los_Angeles")
   fmt.Println(time.Now().In(loc))

   // func (t Time) Local() Time

获取到时间点之后为了满足业务和设计,需要转换成我们需要的格式,也就是所谓的时间格式化。

格式化

  • to string

格式化为字符串我们需要使用 time.Format 方法来转换成我们想要的格式

fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 2018-04-24 10:11:20
fmt.Println(time.Now().Format(time.UnixDate))     // Tue Apr 24 09:59:02 CST 2018

Format 函数中可以指定你想使用的格式,同时 time 包中也给了一些我们常用的格式

const (
  ANSIC    = "Mon Jan _2 15:04:05 2006"
  UnixDate  = "Mon Jan _2 15:04:05 MST 2006"
  RubyDate  = "Mon Jan 02 15:04:05 -0700 2006"
  RFC822   = "02 Jan 06 15:04 MST"
  RFC822Z   = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
  RFC850   = "Monday, 02-Jan-06 15:04:05 MST"
  RFC1123   = "Mon, 02 Jan 2006 15:04:05 MST"
  RFC1123Z  = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
  RFC3339   = "2006-01-02T15:04:05Z07:00"
  RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
  Kitchen   = "3:04PM"
  // Handy time stamps.
  Stamp   = "Jan _2 15:04:05"
  StampMilli = "Jan _2 15:04:05.000"
  StampMicro = "Jan _2 15:04:05.000000"
  StampNano = "Jan _2 15:04:05.000000000"
)

注意: galang 中指定的特定时间格式为 “2006-01-02 15:04:05 -0700 MST”, 为了记忆方便,
按照美式时间格式 月日时分秒年 外加时区 排列起来依次是 01/02 03:04:05PM ‘06 -0700。

  • to time stamp
   func (t Time) Unix() int64
   func (t Time) UnixNano() int64

   fmt.Println(time.Now().Unix())

   // 获取指定日期的时间戳
   dt, _ := time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")
   fmt.Println(dt.Unix())

   fmt.Println(time.Date(2018, 1,2,15,30,10,0, time.Local).Unix())
  • 时间段(Duartion)
   // func ParseDuration(s string) (Duration, error)
   tp, _ := time.ParseDuration("1.5s")
   fmt.Println(tp.Truncate(1000), tp.Seconds(), tp.Nanoseconds())

   func (d Duration) Hours() float64
   func (d Duration) Minutes() float64
   func (d Duration) Seconds() float64
   func (d Duration) Nanoseconds() int64
   func (d Duration) Round(m Duration) Duration     // 四舍五入
   func (d Duration) Truncate(m Duration) Duration   // 向下取整
   
  • 时区(Location)
  
  // 默认UTC  
  loc, err := time.LoadLocation("") 
  // 服务器设定的时区,一般为CST
  loc, err := time.LoadLocation("Local")
  // 美国洛杉矶PDT
  loc, err := time.LoadLocation("America/Los_Angeles")

  // 获取指定时区的时间点
  local, _ := time.LoadLocation("America/Los_Angeles")
  fmt.Println(time.Date(2018,1,1,12,0,0,0, local))
  
  • 日期时间计算

        dt3 := time.Date(2021, 8, 10, 0, 0, 1, 100, time.Local)
        dt4 := time.Date(2021, 8, 11, 23, 59, 22, 100, time.Local)
        fmt.Println(dt3.Sub(dt4))

        dt := time.Date(2021, 1, 10, 0, 0, 1, 100, time.Local)
        fmt.Println(time.Now().After(dt))   // true 
        fmt.Println(time.Now().Before(dt))  // false
        fmt.Println(dt.Equal(time.Now()))   // 是否相等 

实例 1

package main

import (
	"fmt"
	"time"
)

func timeTotamp(timetamp int64) {
    
    
	timeObj := time.Unix(timetamp,0)
	year := timeObj.Year()
	month := timeObj.Month()
	day := timeObj.Day()
	hour := timeObj.Hour()
	minute := timeObj.Minute()
	second := timeObj.Second()
	fmt.Printf("%02d-%02d-%02d %02d:%02d:%02d \n",year,month,day,hour,minute,second)
	fmt.Printf("%d \n",timetamp)

}


func main() {
    
    
	now := time.Now()
	fmt.Printf("now is %v\n\r",now)
	fmt.Printf("format: %02d-%02d-%02d %02d:%02d:%02d \n\r",now.Year(),
		now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second())
	fmt.Println(now.Format("2006/01/02 15:05:05"))

	fmt.Printf("tag1\n\r")
	timetamp := time.Now().Unix()
	timeTotamp(timetamp)

	fmt.Printf("tag2\n\r")
	timestr := "2021-08-10"
	t1, err := time.Parse("2006-01-02",timestr)
        if err != nil {
    
    
                fmt.Println("timeParse err:",err)
                return
        }
	fmt.Printf("%s\n",t1)
	fmt.Printf("%T\n",t1)

	fmt.Printf("tag3\n\r")
	d1 := time.Now().Add(-24 * time.Hour).Format("2006-01-02 15:04:05")
	fmt.Printf("%s\n",d1)

	fmt.Printf("tag4\n\r")
	tp, _ := time.ParseDuration("5.9s")
        fmt.Println(tp.Truncate(1000), tp.Seconds(), tp.Nanoseconds())
	fmt.Println(tp.Minutes())

	fmt.Printf("tag5\n\r")
	loc, err := time.LoadLocation("")
	fmt.Println(loc)

	loca, err := time.LoadLocation("America/Los_Angeles")
	fmt.Println(time.Date(2018,1,1,12,0,0,0,loca))

	fmt.Printf("tag6\n\r")
	dt3 := time.Date(2021, 8, 10, 0, 0, 1, 100, time.Local)
	dt4 := time.Date(2021, 8, 11, 23, 59, 22, 100, time.Local)
	fmt.Println(dt3.Sub(dt4))

	dt := time.Date(2021, 1, 10, 0, 0, 1, 100, time.Local)
	fmt.Println(time.Now().After(dt))   // true
	fmt.Println(time.Now().Before(dt))  // false
   	fmt.Println(dt.Equal(time.Now()))   // 是否相等 

}

运行结果

robot@ubuntu:~/gomod/src/time$ go run timeFormat.go 
now is 2021-08-11 22:00:32.616056587 -0700 PDT m=+0.000062280
format: 2021-08-11 22:00:32 
2021/08/11 22:32:32
tag1
2021-08-11 22:00:32 
1628744432 
tag2
2021-08-10 00:00:00 +0000 UTC
time.Time
tag3
2021-08-10 22:00:32
tag4
5.9s 5.9 5900000000
0.09833333333333333
tag5
UTC
2018-01-01 12:00:00 -0800 PST
tag6
-47h59m21s
true
false
false

猜你喜欢

转载自blog.csdn.net/weixin_38387929/article/details/119641888