Go语言基础之time包

package main

import (
    "fmt"
    "time"
)

func main() {

    t := time.Now()   //2019-07-31 13:55:21.3410012 +0800 CST m=+0.006015601
    fmt.Println(t.Format("20060102150405"))

    //当前时间戳
    t1 := time.Now().Unix()  //1564552562
    fmt.Println(t1)
    //时间戳转化为具体时间
    fmt.Println(time.Unix(t1, 0).String()) //2020-03-26 00:04:37 +0800 CST

    //基本格式化的时间表示
    fmt.Println(time.Now().String()) //2019-07-31 13:56:35.7766729 +0800 CST m=+0.005042501

    fmt.Println(time.Now().Format("2006-01-02"))  //2019-07-31
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))  //2019-07-31 13:57:52

    //获取第几周
    _, week := time.Now().ISOWeek()  
    //获取年、月、日
    year, month, day := rwTools.DateYmdInts() 
}

// 时间戳转年月日 时分秒
func DateFormat(timestamp int) string {
    tm := time.Unix(int64(timestamp), 0)
    return tm.Format("2006-01-02 15:04")
}

//时间戳转年月日
func DateFormatYmd(timestamp int) string {
    tm := time.Unix(int64(timestamp), 0)
    return tm.Format("2006-01-02")
}

//获取当前年月
func DateYmFormat() string {
    tm := time.Now()
    return tm.Format("2006-01")
}

//获取年月日时分秒(字符串类型)
func DateNowFormatStr() string {
    tm := time.Now()
    return tm.Format("2006-01-02 15:04:05")
}

//时间戳
func DateUnix() int {
    t := time.Now().Local().Unix()
    return int(t)
}

//获取年月日时分秒(time类型)
func DateNowFormat() time.Time {
    tm := time.Now()
    return tm
}

//获取第几周
func DateWeek() int {
    _, week := time.Now().ISOWeek()
    return week
}

//获取年、月、日
func DateYMD() (int,int, int) {
    year, month, day := DateYmdInts()
    return year,month,day
}

// 获取年月日
func DateYmdFormat() string {
    tm := time.Now()
    return tm.Format("2006-01-02")
}

// 获取日期的年月日
func DateYmdInts() (int, int, int) {
    timeNow := time.Now()
    year, month, day := timeNow.Date()
    return year, int(month), day
}


//获取当天的时间范伟 Time类型 2020-08-18 00:00:00 +0800 CST 2020-08-18 23:59:59 +0800 CST
func GetCurrentTimestamp() (beginTime, endTime time.Time) {
 t := time.Now()
 timeStr := t.Format("2006-01-02")
 beginTime, _ = time.ParseInLocation("2006-01-02", timeStr, time.Local)
 endTimeTmp := beginTime.Unix() + 86399
 endTime = time.Unix(endTimeTmp, 0)
 return beginTime, endTime
}
//获取当天的时间范伟 int64类型 //1597680000 1597766399
func GetCurrentTimeInt64() (beginTime, endTime int64) {
 t := time.Now()
 timeStr := t.Format("2006-01-02")
 beginTimeTmp, _ := time.ParseInLocation("2006-01-02", timeStr, time.Local)
 beginTime = beginTimeTmp.Unix()
 endTime = beginTime + 86399
 return beginTime, endTime
}

package main

import (
	"fmt"
	"time"
)

func main() {

	sleepDemo()
}
func test1() {

	t := time.Now() //	获取当前的时间对象
	//t type:time.Time value:time.Time{wall:0xbf96f99387cfb7c3, ext:190223, loc:(*time.Location)(0x571b80)}
	fmt.Printf("t type:%T value:%#v \n", t, t)

	//比较时间戳
	dataNumber1 := int64(1586252136)
	// dataNumber1 := endTime22
	if t.Unix() > dataNumber1 {
		fmt.Println("111111")
	}
	fmt.Println("22222222")

}

//时间类型
func timeDemo() {
	now := time.Now()

	fmt.Println("now time is ", now) //	now time is  2020-03-25 22:56:17.263142275 +0800 CST m=+0.000158437

	year := now.Year()
	fmt.Println("year:", year) //year: 2020

	month := now.Month()
	fmt.Printf("month:%02d\n", month) //month:03

	day := now.Day()
	fmt.Println("day:", day) //day: 25

	hour := now.Hour()
	fmt.Println("hour:", hour) //hour: 22

	minute := now.Minute()
	fmt.Println("minute:", minute) //minute: 56

	second := now.Second()
	fmt.Println("second:", second) //	second: 17

	// 2020-03-25 22:56:17
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)

}

//时间戳
func timestampDemo() {
	now := time.Now()                                 //获取当前时间
	timestamp1 := now.Unix()                          //时间戳
	timestamp2 := now.UnixNano()                      //纳秒时间戳
	fmt.Printf("current timestamp1:%v\n", timestamp1) //current timestamp1:1585148417
	fmt.Printf("current timestamp2:%v\n", timestamp2) //current timestamp2:1585148417603894248
}

//使用time.Unix()函数可以将时间戳转为时间格式。
//传入时间戳 如:1586252136
func timestampDemo2(timestamp int64) {
	timeObj := time.Unix(timestamp, 0)                                                  //将时间戳转为时间格式
	fmt.Println(timeObj)                                                                //2020-04-07 17:35:36 +0800 CST
	year := timeObj.Year()                                                              //年
	month := timeObj.Month()                                                            //月
	day := timeObj.Day()                                                                //日
	hour := timeObj.Hour()                                                              //小时
	minute := timeObj.Minute()                                                          //分钟
	second := timeObj.Second()                                                          //秒
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2020-04-07 17:35:36
}

//添加时间
func addTimeDemo() {
	t := time.Now()
	//一个月后的时间
	mealsNumber := 30
	endTime22 := t.Add(time.Hour * 24 * time.Duration(mealsNumber)).Unix()
	fmt.Printf("endTime22 type:%T value:%#v \n", endTime22, endTime22) //endTime22 type:int64 value:1587741038
}

// 时间格式化
func formatDemo() {
	now := time.Now()
	// 格式化的模板为Go的出生时间2006年1月2号15点04分 Mon Jan
	// 24小时制
	timeObj1 := now.Format("2006-01-02 15:04:05.000 Mon Jan")
	fmt.Println(timeObj1)                                 //2020-03-25 23:31:53.076 Wed Mar
	fmt.Printf("Type:%T value:%#v\n", timeObj1, timeObj1) //Type:string value:"2020-03-25 23:31:53.076 Wed Mar"

	// 12小时制
	fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan")) //2020-03-25 11:31:53.076 PM Wed Mar
	fmt.Println(now.Format("2006/01/02 15:04"))                   //2020/03/25 23:31
	fmt.Println(now.Format("15:04 2006/01/02"))                   //23:31 2020/03/25
	fmt.Println(now.Format("2006/01/02"))                         //2020/03/25
	fmt.Println(now.Format("20060102150405000"))                  //0200325233153000

}

//客符串时间格式化成时间类型
func stringToTime() {
	timestr := "2020-02-25 20:18:19"
	timeObj, err := time.Parse("2006-01-02 15:04:05", timestr)
	if err != nil {
		fmt.Printf("parse time failed , err:%v\n", err)
		return
	}
	fmt.Println(timeObj) //2020-02-25 20:18:19 +0000 UTC

	// Type:time.Time value:time.Time{wall:0x0, ext:63718258699, loc:(*time.Location)(nil)}
	fmt.Printf("Type:%T value:%#v\n", timeObj, timeObj)
	fmt.Println(timeObj.Unix()) //1582661899

	timestr1 := "2020-02-25"
	timeObj, err = time.Parse("2006-01-02", timestr1)
	if err != nil {
		fmt.Printf("parse time failed , err:%v\n", err)
		return
	}
	fmt.Println(timeObj) //2020-02-25 00:00:00 +0000 UTC

	// Type:time.Time value:time.Time{wall:0x0, ext:63718185600, loc:(*time.Location)(nil)}
	fmt.Printf("Type:%T value:%#v\n", timeObj, timeObj)
	fmt.Println(timeObj.Unix()) //1582588800

}

//睡5秒钟
func sleepDemo() {
	fmt.Println("开始了...")
	n := 5 //int
	time.Sleep(time.Duration(n) * time.Second)
	// time.Sleep(5 * time.Second)
	fmt.Println("5秒钟过去了...")
}

//Time类型.Unix  是将时间戳转为Time类型
func test() {
    timestamp := time.Now().Unix() //time.Now()是当前时间戳
    fmt.Println("now",timestamp)  //now 1550377621

    #将时间戳转为Time类型
    fmt.Println(time.Unix(timestamp, 0))  //2019-02-17 12:27:01 +0800 CST  
}

参考原文:
https://www.liwenzhou.com/posts/Go/go_time/

近一年的时间

package main

import (
	
	"fmt"
	"time"

	"github.com/golang-module/carbon/v2"
)
func main() {
	GetMonthCount()
}

func GetMonthCount() {
	t := time.Now()
	fmt.Println(t.Format("2006-01-02 15:04:05"))

	//近一年的数据
	timeString := carbon.Parse(t.Format("2006-01-02 00:00:00")).SubMonths(12).ToDateTimeString() // 12个月前
	for i := 1; i <= 12; i++ {
		addTimeStringTmp := carbon.Parse(timeString).AddMonth().ToDateTimeString() // 1个月后
		fmt.Printf("i:(%d) %s-----%s \n", i, timeString, addTimeStringTmp)
		timeString = addTimeStringTmp
	}
}

输出结果

2022-08-06 16:01:46
i:(1) 2021-08-06 00:00:00-----2021-09-06 00:00:00
i:(2) 2021-09-06 00:00:00-----2021-10-06 00:00:00
i:(3) 2021-10-06 00:00:00-----2021-11-06 00:00:00
i:(4) 2021-11-06 00:00:00-----2021-12-06 00:00:00
i:(5) 2021-12-06 00:00:00-----2022-01-06 00:00:00
i:(6) 2022-01-06 00:00:00-----2022-02-06 00:00:00
i:(7) 2022-02-06 00:00:00-----2022-03-06 00:00:00
i:(8) 2022-03-06 00:00:00-----2022-04-06 00:00:00
i:(9) 2022-04-06 00:00:00-----2022-05-06 00:00:00
i:(10) 2022-05-06 00:00:00-----2022-06-06 00:00:00
i:(11) 2022-06-06 00:00:00-----2022-07-06 00:00:00
i:(12) 2022-07-06 00:00:00-----2022-08-06 00:00:00
posted @ 2020-01-09 15:36  HaimaBlog  阅读(1015)  评论(0编辑  收藏  举报