Go的time包提供一些关于时间的计算及显示输入的功能,也提供了一些如时间显示的基本格式的常量等。下面所记录的是我自己所能理解的一些内容。
关于时间格式常量
time包提供了一些输出常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" StampMicro = "Jan _2 15:04:05.000000" StampNano = "Jan _2 15:04:05.000000000" )
|
其实就是一些常量字符串。我们在进行日期输入的时候,就可以指定输出格式进行日期的显示了。
如:
1 2 3 4 5 6 7
| t := time.Now() fmt.Println(t) fmt.Println(t.Format(time.ANSIC))
// output: // 2015-01-02 10:44:16.677396173 +0800 CST // Fri Jan 2 10:44:16 2015
|
那如果我们要自定义一个输出格式又行不行呢,答案是肯定的。只是我们在进行自定义的时候,需要按照那些默认的字符串值进行设置。关于年,月,日, 时,分, 秒,我们发现下面的规律:
1 2 3 4 5 6
| 年:2006 月:01 日:02 时:15 (24小时制) 分:04 秒:05
|
清楚这个格式之后,我们就可以按自己的需要进行自定义时间格式的输入了。如:
1 2 3 4 5 6
| const ( layout = "2006-01-02 15:04:05" )
// 按给定的格式输出日期 fmt.Println(now.Format(layout))
|
时间的计算
时间的计算方面,主要是指加时间,减时间之类的。三个函数:
1 2 3 4
| 加上一个时间:func (t Time) Add(d Duration) Time 加上一个几年几月几日:func (t Time) AddDate(years int, months int, days int) Time 当前时间与时间u的差:func (t Time) Sub(u Time) Duration time.Now().sub(t)的简写版:func Since(t Time) Duration
|
具体用法,我看们看下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package main
import ( "fmt" "time" )
func main() { now := time.Now()
// 打印当前时间 fmt.Println("Now:", now) // 加上相应的时,分,秒 fmt.Println("after 3 hours ", now.Add(3*time.Hour)) fmt.Println("after 3 minutes ", now.Add(30*time.Minute)) fmt.Println("after 3 seconds ", now.Add(30*time.Second))
// 加上(或减去)年,月,日 fmt.Println("加上一年", now.AddDate(1, 0, 0)) fmt.Println("减去一年 AddDate(-1, 0, 0)", now.AddDate(-1, 0, 0))
// 自定义日期输入格式 const ( layout = "2006-01-02 15:04:05" birthday_layout = "2006-01-02" )
// 按给定的格式输出日期 fmt.Println(now.Format(layout)) fmt.Println(now.Format(time.ANSIC))
// 按给定的格式对字符串日期进行分析 born := "1980-01-08"
t1, _ := time.Parse(birthday_layout, born) fmt.Println(t1)
// t1 距当前时间所差的时分秒 sub := time.Since(t1) hour := sub.Hours() fmt.Printf("Days: %.2f\n", hour/24.0) // output // $ go run t_add.go // Now: 2015-01-02 11:03:24.169930555 +0800 CST // after 3 hours 2015-01-02 14:03:24.169930555 +0800 CST // after 3 minutes 2015-01-02 11:33:24.169930555 +0800 CST // after 3 seconds 2015-01-02 11:03:54.169930555 +0800 CST // 加上一年 2016-01-02 11:03:24.169930555 +0800 CST // 减去一年 AddDate(-1, 0, 0) 2014-01-02 11:03:24.169930555 +0800 CST // 2015-01-02 11:03:24 // Fri Jan 2 11:03:24 2015 // 1980-01-08 00:00:00 +0000 UTC // Days: 12778.13
}
|
其它的关于时间的操作函数还有很多,只是感觉就这些,应该算是入门了,使用起来应该差不多够了吧,也没去深究了,当这些解决不了问题的时候,再去看列表,再学习吧。