golang 时间戳 时间格式化 获取当前时间 timestamp 计算时间差
获取当前时间
func Now
func Now() Time
- 1
Now returns the current local time.
func (Time) UTC
func (t Time) UTC() Time
- 1
UTC returns t with the location set to UTC.
func (Time) Unix
func (t Time) Unix() int64
- 1
Unix returns t as a Unix time, the number of seconds elapsed since January 1, 1970 UTC.
func (Time) UnixNano
func (t Time) UnixNano() int64
- 1
UnixNano returns t as a Unix time, the number of nanoseconds elapsed since January 1, 1970 UTC.
看到Unix和UnixNano的区别了吧,就是精度不同而已:
package main import ( "fmt" "strconv" "time" ) func main() { t := time.Now() fmt.Println(t) fmt.Println(t.UTC().Format(time.UnixDate)) fmt.Println(t.Unix()) timestamp := strconv.FormatInt(t.UTC().UnixNano(), 10) fmt.Println(timestamp) timestamp = timestamp[:10] fmt.Println(timestamp) }
输出:
2017-06-21 11:52:29.0826692 +0800 CST
Wed Jun 21 03:52:29 UTC 2017
1498017149
1498017149082669200
1498017149
时间格式化字符串转换
func Parse
package main import ( "fmt" "strconv" "time" ) func main() { const longForm = "Jan 2, 2006 at 3:04pm (MST)" t, _ := time.Parse(longForm, "Jun 21, 2017 at 0:00am (PST)") fmt.Println(t) const shortForm = "2006-Jan-02" t, _ = time.Parse(shortForm, "2017-Jun-21") fmt.Println(t) t, _ = time.Parse("01/02/2006", "06/21/2017") fmt.Println(t) fmt.Println(t.Unix()) i, err := strconv.ParseInt("1498003200", 10, 64) if err != nil { panic(err) } tm := time.Unix(i, 0) fmt.Println(tm) var timestamp int64 = 1498003200 tm2 := time.Unix(timestamp, 0) fmt.Println(tm2.Format("2006-01-02 03:04:05 PM")) fmt.Println(tm2.Format("02/01/2006 15:04:05 PM")) }
输出:
2017-06-21 00:00:00 +0000 PST
2017-06-21 00:00:00 +0000 UTC
2017-06-21 00:00:00 +0000 UTC
1498003200
2017-06-21 08:00:00 +0800 CST
2017-06-21 08:00:00 AM
21/06/2017 08:00:00 AM
再看一个例子:
package main import ( "fmt" "strings" "time" ) func main() { var dates [4]time.Time dates[0], _ = time.Parse("2006-01-02 15:04:05.000000000 MST -07:00", "1609-09-12 19:02:35.123456789 PDT +03:00") dates[1], _ = time.Parse("2006-01-02 03:04:05 PM -0700", "1995-11-07 04:29:43 AM -0209") dates[2], _ = time.Parse("PM -0700 01/02/2006 03:04:05", "AM -0209 11/07/1995 04:29:43") dates[3], _ = time.Parse("Time:Z07:00T15:04:05 Date:2006-01-02 ", "Time:-03:30T19:18:35 Date:2119-10-29") defaultFormat := "2006-01-02 15:04:05 PM -07:00 Jan Mon MST" formats := []map[string]string{ {"format": "2006", "description": "Year"}, {"format": "06", "description": "Year"}, {"format": "01", "description": "Month"}, {"format": "1", "description": "Month"}, {"format": "Jan", "description": "Month"}, {"format": "January", "description": "Month"}, {"format": "02", "description": "Day"}, {"format": "2", "description": "Day"}, {"format": "Mon", "description": "Week day"}, {"format": "Monday", "description": "Week day"}, {"format": "03", "description": "Hours"}, {"format": "3", "description": "Hours"}, {"format": "15", "description": "Hours"}, {"format": "04", "description": "Minutes"}, {"format": "4", "description": "Minutes"}, {"format": "05", "description": "Seconds"}, {"format": "5", "description": "Seconds"}, {"format": "PM", "description": "AM or PM"}, {"format": ".000", "description": "Miliseconds"}, {"format": ".000000", "description": "Microseconds"}, {"format": ".000000000", "description": "Nanoseconds"}, {"format": "-0700", "description": "Timezone offset"}, {"format": "-07:00", "description": "Timezone offset"}, {"format": "Z0700", "description": "Timezone offset"}, {"format": "Z07:00", "description": "Timezone offset"}, {"format": "MST", "description": "Timezone"}} for _, date := range dates { fmt.Printf("\n\n %s \n", date.Format(defaultFormat)) fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12)) fmt.Printf("%-15s | %-12s | %12s \n", "Type", "Placeholder", "Value") fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12)) for _, f := range formats { fmt.Printf("%-15s | %-12s | %-12s \n", f["description"], f["format"], date.Format(f["format"])) } fmt.Printf("%-15s + %-12s + %12s \n", strings.Repeat("-", 15), strings.Repeat("-", 12), strings.Repeat("-", 12)) } }
time包的一些其他用法
time包很强大,这里不能整个篇幅的进行介绍,可以自己去看官方的文档。
func Date
func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
- 1
time常用方法
After(u Time) bool
时间类型比较,是否在Time之后
Before(u Time) bool
时间类型比较,是否在Time之前
Equal(u Time) bool
比较两个时间是否相等
IsZero() bool
判断时间是否为零值,如果sec和nsec两个属性都是0的话,则该时间类型为0
Date() (year int, month Month, day int)
返回年月日,三个参数
Year() int
返回年份
Month() Month
返回月份.是Month类型
Day() int
返回多少号
Weekday() Weekday
返回星期几,是Weekday类型
ISOWeek() (year, week int)
返回年份,和该填是在这年的第几周.
Clock() (hour, min, sec int)
返回小时,分钟,秒
Hour() int
返回小时
Minute() int
返回分钟
Second() int
返回秒数
Nanosecond() int
返回纳秒
应用:
package main import "fmt" import "time" func main() { p := fmt.Println now := time.Now() p(now) then := time.Date( 2017, 06, 21, 20, 34, 58, 0, time.UTC) p(then) p(then.Year()) p(then.Month()) p(then.Day()) p(then.Hour()) p(then.Minute()) p(then.Second()) p(then.Nanosecond()) p(then.Location()) p(then.Weekday()) p(then.Before(now)) p(then.After(now)) p(then.Equal(now)) diff := now.Sub(then) p(diff) p(diff.Hours()) p(diff.Minutes()) p(diff.Seconds()) p(diff.Nanoseconds()) p(then.Add(diff)) p(then.Add(-diff)) }
输出:
2017-06-21 13:22:36.5138633 +0800 CST
2017-06-21 20:34:58 +0000 UTC
2017
June
21
20
34
58
0
UTC
Wednesday
false
true
false
-15h12m21.4861367s
-15.205968371305556
-912.3581022783334
-54741.4861367
-54741486136700
2017-06-21 05:22:36.5138633 +0000 UTC
2017-06-22 11:47:19.4861367 +0000 UTC
//////////////////////////////////////////// 计算时间差 / ////////////////////////////////////////////////////////
package main import ( "fmt" "strings" "time" ) func main() { // Add 时间相加 now := time.Now() // ParseDuration parses a duration string. // A duration string is a possibly signed sequence of decimal numbers, // each with optional fraction and a unit suffix, // such as "300ms", "-1.5h" or "2h45m". // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". // 10分钟前 m, _ := time.ParseDuration("-1m") m1 := now.Add(m) fmt.Println(m1) // 8个小时前 h, _ := time.ParseDuration("-1h") h1 := now.Add(8 * h) fmt.Println(h1) // 一天前 d, _ := time.ParseDuration("-24h") d1 := now.Add(d) fmt.Println(d1) printSplit(50) // 10分钟后 mm, _ := time.ParseDuration("1m") mm1 := now.Add(mm) fmt.Println(mm1) // 8小时后 hh, _ := time.ParseDuration("1h") hh1 := now.Add(hh) fmt.Println(hh1) // 一天后 dd, _ := time.ParseDuration("24h") dd1 := now.Add(dd) fmt.Println(dd1) printSplit(50) // Sub 计算两个时间差 subM := now.Sub(m1) fmt.Println(subM.Minutes(), "分钟") sumH := now.Sub(h1) fmt.Println(sumH.Hours(), "小时") sumD := now.Sub(d1) fmt.Printf("%v 天\n", sumD.Hours()/24) } func printSplit(count int) { fmt.Println(strings.Repeat("#", count)) }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
2016-05-03 sublime 安装 插件
2013-05-03 Oracle When 用法(老忘)
2012-05-03 IIS web.config拒绝访问 未能开始监视对 XX 文件的更改