首页 > 其他分享 >golang标准库之 time

golang标准库之 time

时间:2024-03-06 10:45:47浏览次数:36  
标签:02 fmt golang 标准 时间 time Println now

目录

time库

  • time库是Go语言内置的库,用来定义和操作时间、日期

  • time.Sleep(time.Second * 3)  // 睡眠3秒,同python的time.sleep()方法
    

1. 时间类型

package main

import (
	"fmt"
	"time"
)
func main() {
	now := time.Now()  // 获取当前时间
	fmt.Printf("current time:%v\n", now)

	year := now.Year()     // 获取时间类型的年
	month := now.Month()   // 获取时间类型的月
	day := now.Day()       // 获取时间类型的日
	hour := now.Hour()     // 获取时间类型的小时
	minute := now.Minute() // 获取时间类型的分钟
	second := now.Second() // 获取时间类型的秒
	fmt.Println(year, month, day, hour, minute, second)
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

/*
current time:2024-02-28 10:46:22.6884166 +0800 CST m=+0.005582101
2024 February 28 10 46 22
2024-02-28 10:46:22 
*/

2. 时间戳

  • 时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳

(1)时间格式转化为时间戳

  • Unix() 和 UnixNano()
package main

import (
	"fmt"
	"time"
)

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

// current timestamp1:1709088606
// current timestamp2:1709088606669159200

(2)时间戳转换为时间格式

  • time.Unix()
package main

import (
	"fmt"
	"time"
)

func timestampDemo2(timestamp int64) {
	timeObj := time.Unix(timestamp, 0) //将时间戳转为时间格式
	fmt.Println(timeObj)
	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)
}

func main() {
	now := time.Now()            //获取当前时间
	timestamp1 := now.Unix()     //时间戳
	timestampDemo2(timestamp1)
}

// 2024-02-28 10:56:36 +0800 CST
// 2024-02-28 10:56:36

3. 时间间隔类型

  • Durationtime包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。
  • Duration表示一段时间间隔,可表示的最长时间段大约290年
time包中定义的时间间隔类型的常量如下:

1. 该类型的值的单位有如下几种:

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

2. 定义一个Duration类型变量
var jiange time.Duration
jiange = time.Second  // 赋值 1秒时间间隔 给 jiange
jiange = time.Hour  // 赋值 1小时时间间隔 给 jiange

4. 时间的操作

(1)时间格式化

  • 时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)
  • 补充:如果想格式化为12小时方式,需指定PMMon Jan分别表示当时的星期和月份
package main

import (
	"fmt"
	"time"
)

func formatDemo() {
	now := time.Now()
	// 格式化的模板为Go的出生时间2006年1月2号15点04分 Mon Jan
	// 24小时制
	fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))  // 000为精确到小数点后3位
	// 12小时制
	fmt.Println(now.Format("2006-01-02 03:04:05.00 PM Mon Jan"))  // 000为精确到小数点后2位
	fmt.Println(now.Format("2006/01/02 15:04"))
	fmt.Println(now.Format("15:04 2006/01/02"))
	fmt.Println(now.Format("2006/01/02"))
}

func main() {
	formatDemo()
}

/*
2024-02-28 11:27:20.148 Wed Feb
2024-02-28 11:27:20.14 AM Wed Feb
2024/02/28 11:27                 
11:27 2024/02/28                 
2024/02/28
*/

(2)解析字符串类型的时间

package main

import (
	"fmt"
	"time"
)

func time_string() {
	now := time.Now()
	fmt.Println("000 now:", now)
	// 加载时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println("111 loc:", loc)

	// 按照指定时区 和 指定格式 解析 字符串时间2024/02/28 11:46:20
	my_time, err := time.ParseInLocation("2006/01/02 15:04:05", "2024/02/28 11:46:20", loc)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("222 my_time:", my_time)
	fmt.Println("333 my_time.Sub(now):", my_time.Sub(now))  // my_time.Sub(now) 相当于 my_time - now 的差值
}

func main() {
	time_string()
}

/*
000 now: 2024-02-28 11:46:57.6179639 +0800 CST m=+0.004948901
111 loc: Asia/Shanghai                    
222 my_time: 2024-02-28 11:46:20 +0800 CST
333 my_time.Sub(now): -37.6179639s 
*/

(3)时间加时间间隔

Add方法定义(不是函数): func (t Time) Add(d Duration) Time

示例:
package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	fmt.Println(now)
	later := now.Add(time.Hour)  // 当前时间加1小时后的时间
	fmt.Println(later)
	later = now.Add(time.Minute * 2)  // 当前时间加2分钟后的时间
	fmt.Println(later)
}

(4)两个时间之差

Sub方法定义(不是函数):  func (t Time) Sub(u Time) Duration

返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。要获取时间点t-d(d为Duration),可以使用t.Add(-d)

示例:见上面时间格式化中示例的 Sub

(5)时间是否相同

Equal方法定义(不是函数):  func (t Time) Equal(u Time) bool

判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。本方法和用t==u不同,这种方法还会比较地点和时区信息

(6)判断时间前后

  • Before 和 After
Before方法定义(不是函数):  func (t Time) Before(u Time) bool

如果t代表的时间点在u之前,返回真;否则返回假

After方法定义(不是函数):  func (t Time) After(u Time) bool

如果t代表的时间点在u之后,返回真;否则返回假

(7)定时器

  • 使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)
示例:

func tickDemo() {
	ticker := time.Tick(time.Second * 2)  // 定义一个2秒间隔的定时器
	for i := range ticker {
		fmt.Println(i)  // 每2秒都会执行的任务
	}
}

// 该for循环不会停止,类似计划任务

标签:02,fmt,golang,标准,时间,time,Println,now
From: https://www.cnblogs.com/Mcoming/p/18055988

相关文章

  • golang进阶之结构体
    目录一、结构体(Go的面向对象)1.结构体的含义2.type关键字(1)自定义新类型(2)类型的别名(3)自定义类型和类型别名的区别二、结构体的定义三、结构体实例化1.基本实例化2.匿名结构体2.指针型结构体3.取结构体的地址实例化4.结构体指针进阶实例四、结构体的初始化1.未初始化的结构......
  • DW_apb_timers介绍 --20240305
    DW_apb_timers是新思设计的基于APB总线的一个IP DW_apb_timers框图如下:DW_apb_timers特性:1、多达8个可编程定时器;2、定时器宽度可设:8至32位;3、支持两种运行模式:freerunning和user-mode;4、支持定时器的独立计时;5、每个中断可配置极性:低电平(下降沿),高电平(上升沿);6、单个或......
  • 标准日本语——第7课(练习2)
    1.在()中填入适当的词语。【例】昨日(何)を買いましたか。ーー車の雑誌を買いました。(1)(いつ)上海へ行きますか。ーー来週行きます。(2)毎日(何時)に起きますか。ーー6時半に起きます。(3)(だれ/どなた)と図書館へ行きますか。ーー小野さんと行きます。(4)駅へ(何)で......
  • STM32标准库基本定时器
    STM32标准库基本定时器1.定时器初始化voidTIM6_Init()//定时器6初始化{ TIM_TimeBaseInitTypeDefTIM_TimBaseStructure;//定义定时器结构体 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);//使能定时器6的时钟 TI......
  • [Rust] Using Box<dyn error::Error>> return one of miultiple error types at runti
    usestd::error;usestd::fmt;usestd::num::ParseIntError;fnmain()->Result<(),Box<dynerror::Error>>{letpretend_user_input="42";letx:i64=pretend_user_input.parse()?;println!("output={:?}",Po......
  • C++ 简易STL 教程 与 C++ 标准库
    C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++提供了各种不......
  • time模块实现进度条
    显示进度条defmyprocess(percent):ifpercent>1:percent=1#打印对应的#号数量*"#"=>字符串#号效果strvar=int(percent*50)*"#"#进行打印%%=>%print("\r[%-50s]%d%%"%(strvar,percent*100),end="")接受数据rec......
  • UniDateTimePicker日期转换问题---“2024-03-05” is not a date and time
    这个问题是由于操作系统的日期格式与用StrToDate给UniDateTimePicker.dateTime赋值格式不一致造成的。注意:这个问题在使用UniGui的Standalone模式下没问题,在Windowsservice模式下会出现上述问题。可以在系统的主程序中设置一下系统日期格式:procedureSetDateTimeFormat();var......
  • pip install selenium报错 raise ReadTimeoutError--解决方法
    pipinstallselenium报错如下:raiseReadTimeoutError(self._pool,None,"Readtimedout.")pip._vendor.urllib3.exceptions.ReadTimeoutError:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):Readtimedout. 原因:timeout超时,默认15s解......
  • python -- 解决安装pyxll-jupyter时出现“TimeoutError: The read operation timed ou
     在cmd输入命令”pipinstallpyxll-jupyter“进行安装,控制台出现以下报错信息:Downloadingpyxll_jupyter-0.5.2-py3-none-any.whl(46kB)----------------------------------------46.3/46.3kB16.1kB/seta0:00:00Downloadingjupyter-1.0.0-py2.py3-none-any.whl......