该文可以快速在Go语言中获得时间的计算。

在Go中获取时间

如何获取当前时间

now := time.Now()
fmt.Printf("current time is :%s", now) current time is :2009-11-10 23:00:00 +0000 UTC m=+0.000000001

如何获取UNIX Timestamp

cur_time := time.Now().Unix()
fmt.Printf("current unix timestamp is :%v\n", cur_time )

如何获取当日0:00:00 0:00:00

now := time.Now()
date := time.Date(now.Year(), now.Month(), now.Day(),0, 0, 0, 0, time.Local)
fmt.Printf("date is :%s", date) date is :2021-04-13 00:00:00 +0800

如何获取时区时间

标准时间 time.Now().UTC()

本地时区 time.Now().Local()


// 获取0时区时间
fmt.Printf("date is :%s\n", time.Now().UTC()) date is :2021-04-13 16:02:33.853254 +0000 UTC // 快速设置时区
timeLocation, _ := time.LoadLocation("Asia/Tokyo") //使用时区码
fmt.Println(time.Now().In(timeLocation).String()) // 快速设置时区 2021-04-14 01:09:18.140997 +0900 JST

Go中的固定时间格式

获取月份

time.April

type Month int

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

获取星期

time.Sunday

type Weekday int

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

Go中的时间格式化

Go中时间格式化的格式为 2006-01-02 15:04:05 612345为格式,而不是具体时间


// YYYY-MM-DD
fmt.Println(time.Now().Format("2006-01-02")) // YYYY-MM-DD hh:mm:ss
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // M-DD
fmt.Println(time.Now().Format("1-02")) // MM-DD
fmt.Println(time.Now().Format("01-02") // 获取当前的小时、分钟、秒(整数)
nowHour, nowMinute, nowSecond = time.Now().Clock() // 获取前一天
// AddDate(Years, months, days)
yesterday = time.Now().AddDate(0,0,-1).Format("01/02") // 显示星期英文简写
fmt.Println(time.Now().Format("2006-01-02 15:04:05 Mon")) // 星期的大写
fmt.Println(time.Now().Format("2006-01-02 15:04:05 Monday")) // 增加微秒
fmt.Println(time.Now().Format("2006-01-02 15:04:05.000000")) // 纳秒
fmt.Println(time.Now().Format("2006-01-02 15:04:05.000000000"))
} // print result
08-10-2018
08-10-2018 21:11:58
08-10-2018 21:11:58 Fri
08-10-2018 21:11:58 Friday
08-10-2018 21:11:58.880934
08-10-2018 21:11:58.880934320

Go中的时间计算

如何获取本周日期有哪些?

获取一个星期的第一天是几号

t:=time.Now()
fmt.Println(t.Weekday()) // 获取现在时间为本周的星期几

得到本日为星期几后,可以对时间进行计算,因为time包内星期的常量都为int,可以直接进行算数运算.

用一周的第一天减去当日为星期几,如果为0既『本日为本周的第一天』

time.AddDate(year, month, date),仅可以添加年月日

time.Add(Hours, Minutes, Seconds),仅可以添加时分秒

offset := int(time.Monday - t.Weekday()) //=-1

如不为0,time包提供了,「以当前时间为基点,进行加减运算」

// t.AddDate(year, month, date)
t.AddDate(0,0,offset) // 可以获取到,周一为几月几日

综上所属,可以获得每周第一天为几月几日,每周随后一天为几月几日


/**
* 获取上周周第一天具体年月日
**/ func GetLastWeekFirstDate() (weekMonday string) {
thisWeekMonday := GetFirstDateOfWeek()
TimeMonday, _ := time.Parse("2006-01-02", thisWeekMonday)
lastWeekMonday := TimeMonday.AddDate(0, 0, -7)
weekMonday = lastWeekMonday.Format("2006-01-02")
return
} /**
* 获取本周的周一具体年月日
**/ func GetFirstDateOfWeek() (weekMonday string) {
now := time.Now()
offset := int(time.Monday - now.Weekday())
if offset > 0 {
offset = -6
} weekStartDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
weekMonday = weekStartDate.Format("2006-01-02")
return
} /**
* 获取上周最后一天具体年月日
**/ func GetLastWeekLastDate() (weekMonday string) {
now := time.Now() offset := int(time.Monday - now.Weekday())
if offset > 0 {
offset = -6
} weekStartDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
weekMonday = weekStartDate.AddDate(0, 0, -1).Format("2006-01-02")
return
} /**
* 获取上周一星期所有天数的具体年月日
**/ func GetBetweenDates(sdate, edate string) []string {
d := []string{}
timeFormatTpl := "2006-01-02 15:04:05"
if len(timeFormatTpl) != len(sdate) {
timeFormatTpl = timeFormatTpl[0:len(sdate)]
}
date, err := time.Parse(timeFormatTpl, sdate)
if err != nil {
return d
}
date2, err := time.Parse(timeFormatTpl, edate)
if err != nil {
return d
}
if date2.Before(date) {
return d
}
// 输出日期格式固定
timeFormatTpl = "2006-01-02"
date2Str := date2.Format(timeFormatTpl)
d = append(d, date.Format(timeFormatTpl))
for {
date = date.AddDate(0, 0, 1)
dateStr := date.Format(timeFormatTpl)
d = append(d, dateStr)
if dateStr == date2Str {
break
}
}
return d
}

最全的go语言的时间格式的更多相关文章

  1. cmd提取时间格式(小时)问题以及Windows系统语言判断

    你在这里看到了我的现在的时间是01:15,没错正在做个开发,本来好好的,结果一运行,直接报错: 这里就是时间中的获取小时出了问题,之前23点那会已经调试通过了,过那时是没有问题的,那么这时发生了什么? ...

  2. pandas修改全列的时间格式 无需使用apply

    df.date.dt.strftime('%Y%m%d') #实现全列修改时间格式

  3. Windows 2012 英文版系统安装中文语言包及时间格式设置

    1.安装中文语言包:在运行窗口中输入"LPKSetup.exe",选择中文语言包安装.--------------------------------------------- 2 ...

  4. iOS- NSDateFormatter (自定义时间格式)

    一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2.  ...

  5. db2 日期时间格式

    db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...

  6. WinServer2008r2 机器时间格式修改

    windows2008 这么高级的系统不可能改个系统的日期时间显示格式还要进注册表啊.于是有baidu,google了下终于发现了,原来还有不需要注册表的更简便方法.windows2008默认时间格式 ...

  7. Win2008 IIS7日期时间格式更改最简便方法

    windows2008 这么高级的系统不可能改个系统的日期时间显示格式还要进注册表啊.于是有baidu,google了下终于发现了,原来还有不需要注册表的更简便方法. windows2008默认时间格 ...

  8. Sql日期时间格式转换;取年 月 日,函数:DateName()、DATEPART()

    一.sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007 ...

  9. sql 日期时间格式转换

    Sql日期时间格式转换   sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, ...

随机推荐

  1. RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布

    现在,我们需要模拟传感器,生成数据,并发布到 RabbitMQ. 建立传感器项目 在 GOPATH src 下建立文件夹 sensors,使用 go mod init 初始化,并创建 main.go. ...

  2. Android 学习之活动的生命周期

    •返回栈 Android 中的活动是可以叠层的: 我们每启动一个新的活动,就会覆盖在原活动之上: 然后点击 Back 键会销毁最上面的活动,下面一个活动就会重新显示出来: 其实 Android 是使用 ...

  3. Android Studio中Switch控件有关 textOn 和 textOff 用法

    •属性 textOn:控件打开时显示的文字 textOff:控件关闭时显示的文字 showText:设置是否显示开关上的文字(API 21及以上) •用法 <?xml version=" ...

  4. 力扣 - 208. 实现Trie(前缀树)

    目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...

  5. java进阶(41)--反射机制

    文档目录: 一.反射机制的作用 二.反射机制相关类 三.获取class的三种方式 四.通过反射实例化对象 五.通过读属性文件实例化对象 六.通过反射机制访问对象属性 七.通过反射机制调用方法 ---- ...

  6. 翻译:《实用的Python编程》08_00_Overview

    目录 | 上一节 (7 高级主题) | 下一节 (9 包) 8. 测试和调试 本节介绍与测试.日志和调试有关的基本主题. 8.1 测试 8.2 日志,错误处理和诊断 8.3 调试 目录 | 上一节 ( ...

  7. 封装一个处理 react 异常的最简 ErrorBoundary 组件 🎅

    前言 从 React 16 开始,引入了 Error Boundaries 概念,它可以捕获它的子组件中产生的错误,记录错误日志,并展示降级内容,具体 官网地址. 错误边界避免一个组件错误导致整个页面 ...

  8. Java【线程池、Lambda表达式】

    见pdf 等待唤醒机制 wait和notify 第二章 线程池 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低 系统的效率,因为频繁创建线程和销毁 ...

  9. dubbo支持哪些通信协议?支持哪些序列化协议?

    (1)dubbo支持不同的通信协议 1)dubbo协议 dubbo://192.168.0.1:20188 默认就是走dubbo协议的,单一长连接,NIO异步通信,基于hessian作为序列化协议 适 ...

  10. 黑马 - poi Excel2

    文件上传: //划线处值得效仿 构造用户列表:User.java 批量保存用户