phper 学 golang --日期时间处理

时间相关的常量

格式化时间

golang 中时间处理的包叫time,直接导入就可以使用.初上手的人一定会对其中指定的时间格式字串感到崩溃, 2006-01-02 15:04:05这么魔幻的时间到底该怎么记?有人(就是我)提出一套口诀:

    1 2 3 4 5 6 7

    月日时分秒年区 (区代表时区)

背吧,也不难.习惯了也没啥了.golang 的核心开发者很陶醉于这种特立独行的方式,但是我对此嗤之以鼻,根本没有传统的Y-m-d H:i:s好用.

不过你也不需要记,time包中已经预设了常见的格式化用的常量了:

    time.ANSIC       = "Mon Jan _2 15:04:05 2006"

    time.UnixDate    = "Mon Jan _2 15:04:05 MST 2006"

    time.RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"

    time.RFC822      = "02 Jan 06 15:04 MST"

    time.RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone

    time.RFC850      = "Monday, 02-Jan-06 15:04:05 MST"

    time.RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"

    time.RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone

    time.RFC3339     = "2006-01-02T15:04:05Z07:00"

    time.RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"

    time.Kitchen     = "3:04PM"

    // Handy time stamps.

    time.Stamp      = "Jan _2 15:04:05"

    time.StampMilli = "Jan _2 15:04:05.000"

    time.StampMicro = "Jan _2 15:04:05.000000"

    time.StampNano  = "Jan _2 15:04:05.000000000"

基础的时间常量

golang 中基础时间单位是Nanosecond,为了方便计算,time包中预设了如下几个常量:

time.Nanosecond           = 1

time.Microsecond          = 1000 * Nanosecond

time.Millisecond          = 1000 * Microsecond

time.Second               = 1000 * Millisecond

time.Minute               = 60 * Second

time.Hour                 = 60 * Minute

这样在计算的时候会很方便,比如打印time.Second 你就会得到time.Duration类型(int64)的 1000000000 这个值.

字符串和时间戳

获取当前时间戳

time.Now().Unix()  //获取int64类型的当前时间戳

time.Now() 函数返回了一个初始化为当前时间的Time结构体,然后Unix()函数将其转化为int64类型的时间戳数字.

通过给定字符串获取时间戳

timeLayout := "2006-01-02 15:04:05"
time, err := time.Parse(timeLayout, "2016-10-10 12:22:12")
if err == nil {
	fmt.Print(time.Unix())
}

注意timeLayout的长度要和给定的字符串长度一样,否则转换会出错.

通过给定时间戳获取时间字符串

fmt.Print(time.Unix(1476112209, 0).Format(time.ANSIC)) //输出Mon Oct 10 23:10:09 2016

time.Unix() 函数通过传入时间戳来获取一个time类型的结构体,然后Format()成指定格式的字符串 注意函数time.Unix(sec int64, nsec int64) 和 结构体方法time.Now().Unix() 两个的区别

程序暂停一段时间

time.sleep(time.Sleep(time.Second * 3)) //程序暂停3秒

Comments

comments powered by Disqus