18、golang时间管理

这篇具有很好参考价值的文章主要介绍了18、golang时间管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间

时间是非常重要的,离开了时间,几乎没有哪个生产环境数据能够有意义。
在Go语言中,时间定义为Time结构体。

package main

import (
	"fmt"
	"time"
)

func main() {
	var t = time.Now()
	fmt.Println(t)		
	fmt.Printf("%v %+[1]v\n", t)
	fmt.Printf("%#v\n", t)
	fmt.Printf("%T, %[1]v\n", t.UTC()) // UTC时间
}
2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601
2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601 2024-01-13 19:06:34.6726547 +0800 CST m=+0.003070601
time.Date(2024, time.January, 13, 19, 6, 34, 672654700, time.Local)
time.Time, 2024-01-13 11:06:34.6726547 +0000 UTC

时间格式化

Go语言没有采用%Y%m%d这样的格式化符号,它很特别。

package main

import (
	"fmt"
	"time"
)

func main() {
	var t = time.Now()
	fmt.Printf("%T, %[1]v\n", t)
	fmt.Println(t.Format("0102 030405 06 pm -0700"))
	fmt.Println(t.UTC().Format("0102 030405 06 pm"))
}
time.Time, 2024-01-13 19:10:07.3356399 +0800 CST m=+0.003551301
0113 071007 24 pm +0800
0113 111007 24 am

记住一个字符串"010203040506pm-0700",即 1月2日下午3点4分5秒06年西7区 ,改成我们习惯的格式符 2006/01/02 15:04:05 -0700

Year: "2006" "06"
Month: "Jan" "January" "01" "1"
Day of the week: "Mon" "Monday"
Day of the month: "2" "_2" "02" 2不补位;_2补空格;02不够补0
Day of the year: "__2" "002"
Hour: "15" "3" "03" (PM or AM) 如果写303显示为12小时制;15显示为24小时制
Minute: "4" "04"
Second: "5" "05"
AM/PM mark: "PM"
"-0700" ±hhmm 时区
09匹配小数部分
格式化时,09表示小数部分位数,0超出部分补0,9超出部分不补0
var t = time.Now()
fmt.Printf("%T, %[1]v\n", t)
fmt.Println(t.Format("2006/01/02 15:04:05 -0700")) // 带时区
fmt.Println(t.UTC().Format("2006/01/02 15:04:05.0000")) // 不带时区

time.Time, 2024-01-13 19:14:51.5891868 +0800 CST m=+0.003472101
2024/01/13 19:14:51 +0800
2024/01/13 11:14:51.5891

时间解析

package main

import (
	"fmt"
	"time"
)
func main() {
	if t, err := time.Parse(
		"2006/01/02 15:04:05 -0700", // 格式字符串
		"2008/09/08 20:36:50 +0800", // 时间字符串
	); err == nil {
		fmt.Println(t)
	} else {
		fmt.Println(err)
	}
}
2008-09-08 20:36:50 +0800 CST

带小数部分解析
.0 解析时,0的位数必须和字符串中的小数部分位数完全一致,否则失败
.9 解析时,可以匹配任意位数小数部分,包括没有小数部分文章来源地址https://www.toymoban.com/news/detail-809953.html

time.Parse(
"2006/01/02 15:04:05.000000 -0700", // 格式字符串
"2008/09/08 20:36:50.123456 +0800", // 时间字符串
)
time.Parse(
"2006/01/02 15:04:05.9 -0700",    // 格式字符串
"2008/09/08 20:36:50.123456 +0800", // 时间字符串
)

时间属性

package main

import (
	"fmt"
	"time"
)

type Month int

const (
	January Month = 1 + iota
	February
	March
	April
	May
	June
	July
	August
	September
	October
	November
	December
)

type Weekday int

const (
	Sunday Weekday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

func main() {
	if t, err := time.Parse(
		"2006/01/02 15:04:05 -0700", // 格式字符串
		"2008/09/08 20:36:50 +0800", // 时间字符串
	); err == nil {
		// 2008-09-08 20:36:50 +0800 CST
		// 时间戳
		fmt.Println(t.Unix(), t.UnixMilli(), t.UnixMicro(), t.UnixNano())
		// 年月日
		fmt.Println(
			t.Year(), t.Month(), t.Month().String(), // 英文月份,默认走String方法
			int(t.Month()), // 数字月份 9
			t.Day(),
			t.YearDay(), // YearDay本年的第几天
		)
		// 时分秒
		fmt.Println(t.Hour(), t.Minute(), t.Second(), t.Nanosecond()) //Nanosecond纳秒
		// 星期
		fmt.Println(t.Weekday(), int(t.Weekday())) // Weekday
		fmt.Println(t.ISOWeek())                   // 年的第几周
	}
}

1220877410 1220877410000 1220877410000000 1220877410000000000
2008 September September 9 8 252
20 36 50 0
Monday 1
2008 37

市区

package main

import (
	"fmt"
	"time"
)

func main() {
	if t, err := time.Parse(
		"2006/01/02 15:04:05", // 格式字符串
		"2008/09/08 20:36:50", // 时间字符串
	); err == nil {
		fmt.Println(t)         // 2008-09-08 20:36:50 +0000 UTC
		fmt.Println(t.Local()) // 2008-09-09 04:36:50 +0800 CST
	}
}
2008-09-08 20:36:50 +0000 UTC
2008-09-09 04:36:50 +0800 CST

如果没有时区,表示UTC,可以简单认为是零时区时间。
注意,这里可能导致时间错误,给出的时间,心里想的是东八区的时间,但是Go语言却认为是零时区
的,如果再转换到东八区,就差了8个小时了。



func main() {
	tz, _ := time.LoadLocation("Asia/Shanghai") // 使用名字
	if t, err := time.ParseInLocation(
		"2006/01/02 15:04:05", // 格式字符串
		"2008/09/08 20:36:50", // 时间字符串
		tz,
	); err == nil {
		fmt.Println(t)         // 2008-09-08 20:36:50 +0800 CST
		fmt.Println(t.Local()) // 2008-09-08 20:36:50 +0800 CST
	}
}

2008-09-08 20:36:50 +0800 CST
2008-09-08 20:36:50 +0800 CST

时间运算

时间 + 时间 = ?
时间 - 时间 = 时间差、时间增量
时间 ± 时间增量 = 时间
package main

import (
	"fmt"
	"time"
)

func main() {
	tz, _ := time.LoadLocation("Asia/Shanghai") // 使用名字
	s1 := "2022/09/08 20:36:50"
	s2 := "2022/09/08 21:40:51"
	layout := "2006/01/02 15:04:05"
	t1, _ := time.ParseInLocation(layout, s1, tz)
	t2, _ := time.ParseInLocation(layout, s2, tz)
	fmt.Println(t1)
	fmt.Println(t2)

	// 时间差
	delta := t2.Sub(t1)                     // t2 - t1
	fmt.Printf("delta: %v, %[1]T\n", delta) // Duration类型
	fmt.Println(delta.Seconds())            // 共差多少秒
	// 构造Duration
	ns3 := time.Duration(3)              // 3纳秒
	s3 := time.Duration(3 * time.Second) // 3秒
	h3 := time.Duration(3 * time.Hour)   // 3小时
	fmt.Println(ns3, s3, h3)
	// 时间偏移
	t3 := t2.Add(h3)
	fmt.Println(t3)
	t4 := t2.Add(-h3)
	fmt.Println(t4)
	fmt.Println(t3.After(t4))
}


2022-09-08 20:36:50 +0800 CST
2022-09-08 21:40:51 +0800 CST
delta: 1h4m1s, time.Duration
3841
3ns 3s 3h0m0s
2022-09-09 00:40:51 +0800 CST
2022-09-08 18:40:51 +0800 CST
true

到了这里,关于18、golang时间管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 批量采集的时间管理与优化

    在进行大规模数据采集时,如何合理安排和管理爬取任务的时间成为了每个专业程序员需要面对的挑战。本文将分享一些关于批量采集中时间管理和优化方面的实用技巧,帮助你提升爬虫工作效率。 1. 制定明确目标并设置合适频率 首先要明确自己所需获取数据的范围,并根

    2024年02月09日
    浏览(36)
  • 项目管理时间

    优质博文 IT-BLOG-CN 项目时间管理的五个关键步骤: 【1】活动定义:确定为完成项目可交付成果所必须进行的具体活动; 【2】活动排序:确定各活动的依赖关系; 【3】活动历时估算:根据需要的资源情况,估算完成每项活动所需要的工作时间; 【4】活动排期:编制项目进

    2024年02月13日
    浏览(38)
  • 第11章 定时器和时间管理

    相对于事件驱动而言,内核中有大量的函数基于时间驱动的。有些函数周期执行,对调度程序中的运行队列进行平衡调整或对屏幕进行刷新。有些函数需要等待一个相对函数后才运行。 周期性产生的事件都是由系统定时器驱动的,系统定时器是一个硬件,以固定频率产生中断

    2024年02月11日
    浏览(38)
  • 【学习FreeRTOS】第12章——FreeRTOS时间管理

    FreeRTOS的系统时钟节拍计数器是全局变量xTickCount,一般来源于系统的SysTick。在STM32F1中,SysTick的时钟源是72MHz/8=9MHz,如下代码,RELOAD = 9MHz/1000-1 = 8999,所以时钟节拍是1ms。 判断OS是否运行,运行才可以 启动正常调度 屏蔽所有中断 xTaskIncrementTick()处理系统节拍 ,并决定是否进

    2024年02月12日
    浏览(32)
  • [管理与领导-56]:IT基层管理者 - 扩展技能 - 1 - 时间管理 -3- 帮助下属提升效能(辅导与激励)

    对下属的辅导是管理者一个重要的职责,帮助下属者提升时间效能也辅导下属的一个职责。 管理者与下属,管理者与团队是“共生”的关系,管理者提升下属的时间效能,就是提升团队的效能,也就是提升了自己的效能。 针对不同的类型的下属,提升效能的方式是不同的,

    2024年02月11日
    浏览(46)
  • 【Golang】go编程语言适合哪些项目开发?

    前言 在当今数字化时代,软件开发已成为各行各业的核心需求之一。 而选择适合的编程语言对于项目的成功开发至关重要。 本文将重点探讨Go编程语言适合哪些项目开发,以帮助读者在选择合适的编程语言时做出明智的决策。 Go 编程语言适合哪些项目开发? Go是由Google开发

    2024年02月04日
    浏览(76)
  • 基于微信小程序的时间管理小程序

    博主主页: 一点素材 博主简介: 专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发。 感兴

    2024年02月20日
    浏览(39)
  • Rust in Action笔记 第九章 时间管理

    本章主要讲如何实现一个网络时间协议NTP(Network Time Protocol)客户端,谷歌的世界时间同步误差大概在7毫秒,开源网站CockroachDB的延迟在数十毫秒,使用了NTP协议,在处理与时间敏感的数据时, chrono 库成为了事实上的标准库; 由于潮汐影响和地球转矩的问题,事实上每一秒

    2024年02月12日
    浏览(71)
  • 番茄工作法图解——简单易行的时间管理方法

    ISBN: 978-7-115-24669-1 作者:【瑞典】诺特伯格(Staffan Noteberg) 页数:136页 阅读时间:2023-06-10 推荐指数:★★★★★ 番茄工作法(意大利语:Pomodoro Technique)是一种时间管理方法,是由意大利人 弗朗西斯科·西里洛 在大学生活的时候发明。起初他也是一个严重的拖延症患者,

    2024年02月09日
    浏览(38)
  • 深入理解 Istio 流量管理的超时时间设置

    部署 httpbin 服务: 部署 sleep 服务: httpbin 服务作为接收请求的服务端, sleep 服务作为发送请求的客户端。 在 sleep 服务中向 httpbin 服务发出请求: 返回结果如下: 可以看到,请求大约在 5 秒返回 200 (OK)。 创建虚拟服务,访问 httpbin 服务时,请求超时设置为 3 秒: 再次访

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包