go里面的时间date

package main

import (
	"fmt"
	"time"
)

var timeLayoutStr = "2006-01-02 15:04:05" //go中的时间格式化必须是这个时间
//var timeLayoutStr = 2006/01/02 03:04:05 //合法, 格式可以改变
//var timeLayoutStr = 2019/01/02 15:04:05 //不合法, 时间必须是2016年1月2号这个时间
func testFormat() {
	/*
	   格式:
	   月份 1,01,Jan,January
	   日  2,02,_2
	   时  3,03,15,PM,pm,AM,am
	   分  4,04
	   秒  5,05
	   年  06,2006
	   时区 -07,-0700,Z0700,Z07:00,-07:00,MST
	   周几 Mon,Monday

	*/
	fmt.Println(time.Now().Format("现在是1月份"))
	fmt.Println(time.Now().Format("现在是01月_2日"))
	fmt.Println(time.Now().Format("现在是Jan月份"))
	fmt.Println(time.Now().Format("现在是January月份"))
	fmt.Println("现在是:", time.Now().Format(timeLayoutStr))

}

func testFormat1() {
	t := time.Now() //当前时间
	t.Unix()        //时间戳

	ts := t.Format(timeLayoutStr) //time转string

	fmt.Printf("time转string:%T,%v\n", ts, ts)
	st, _ := time.Parse(timeLayoutStr, ts) //string转time

	fmt.Printf("string转time :%T,%v\n", st, st)
	//在go中, 可以格式化一个自定义格式的时间字符串
	prefixTStr := "PREFIXA-- 2021-11-05 -TESTB- 18:32:12 --SUFFIXC"       //带前自定义格式的时间字符串
	preTimeLayoutStr := "PREFIXA-- 2006-01-02 -TESTB- 15:04:05 --SUFFIXC" //解析格式需要和自定义格式的时间字符串一致
	prefixTime, err := time.Parse(preTimeLayoutStr, prefixTStr)
	if err != nil {
		fmt.Println("err:", err)
	} else {

		fmt.Println("prefixTime:", prefixTime.Format(timeLayoutStr))
	}

	//时间加减 time.ParseDuration()
	// such as "300ms", "-1.5h" or "2h45m".
	// Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
	at, err := time.ParseDuration("-24h30m") //24小时30分钟前的时间, 正数就是之后的时间
	if err != nil {
		fmt.Println("err:", err)
	} else {
		fmt.Println("时间加减 -24小时30分钟:", (t.Add(at)).Format(timeLayoutStr))
	}

	//两个时间差
	sub := t.Sub(prefixTime)
	fmt.Println("两个时间差:", sub.Hours(), "小时") //sub.Seconds() 秒,  sub.Minutes()分钟,  sub.Hours()小时

}

func main() {
	testFormat()

	testFormat1()

}

  

posted @ 2022-04-24 19:59  wsh3166Sir  阅读(134)  评论(1编辑  收藏  举报