Go惯用包系列-time包

Go常用包系列---time包

首先先贴一下免*的go语言文档:

中文文档:http://studygolang.com/pkgdoc

英文文档:http://docs.studygolang.com/pkg/


下边为使用例子:

package main

import (
	"fmt"
	"time"
)

func main() {

	fmt.Printf("当前年份:%d\n", time.Now().Year())

	fmt.Printf("当前月份:%d\n", time.Now().Month())

	fmt.Printf("当前日子:%d\n", time.Now().Day())

	fmt.Printf("当前小时:%d\n", time.Now().Hour())

	fmt.Printf("当前分钟:%d\n", time.Now().Minute())

	fmt.Printf("当前秒:%d\n", time.Now().Second())

	now := time.Now()
	//当前时间的时间戳
	fmt.Printf("当前时间戳:%d\n", now.Unix())

	//日期格式化
	//YYYY (4位数表示完整年份)
	fmt.Printf("当前的4位数年份为:%s\n", now.Format("2006"))

	//yy (2位数表示的年份)
	fmt.Printf("当前的2位数年份为:%s\n", now.Format("06"))

	year, _, _ := time.Now().Date()
	fmt.Printf("当前年份为:%d\n", year)

	//mm 有前导零的月份
	fmt.Printf("当前月份:%s月\n", now.Format("01"))

	//n 没有前导零的月份
	fmt.Printf("当前月份:%s月\n", now.Format("1"))

	_, month, _ := time.Now().Date()
	fmt.Printf("当前月份:%d月\n", month)
	fmt.Printf("当前月份:%s\n", month)

	//dd 月份中的第几天,有前导零的 2 位数字
	fmt.Printf("当前日期:%s日\n", now.Format("02"))

	//j 月份中的第几天,没有前导零
	fmt.Printf("当前日期:%s日\n", now.Format("2"))

	_, _, day := time.Now().Date()
	fmt.Printf("当前月份:%d日\n", day)

	//D 星期中的第几天,文本表示,3个字母
	fmt.Printf("当前时间:%s\n", now.Format("Mon"))

	//l 星期几,完整的文本格式
	fmt.Printf("当前时间:%s\n", now.Format("Monday"))
	//功能同上
	fmt.Printf("当前时间:%s\n", now.Weekday().String())

	//HH (24小时制)
	fmt.Printf("当前时间:%s时\n", now.Format("15"))

	//hh (12小时制,有前导零)
	fmt.Printf("当前时间:%s时\n", now.Format("03"))

	//g (12小时制,没有前导零)
	fmt.Printf("当前时间:%s时\n", now.Format("3"))

	fmt.Printf("当前时间:%d时\n", now.Hour())

	hour, _, _ := now.Clock()
	fmt.Printf("当前时间:%d时\n", hour)

	//ii (有前导零的分钟数)
	fmt.Printf("当前时间:%s分\n", now.Format("04"))

	// (没有前导零的分钟数)
	fmt.Printf("当前时间:%s分\n", now.Format("4"))

	fmt.Printf("当前时间:%d分\n", now.Minute())

	_, minute, _ := now.Clock()
	fmt.Printf("当前时间:%d分\n", minute)

	//ss (有前导零的秒数)
	fmt.Printf("当前时间:%s秒\n", now.Format("05"))

	// (没有前导零的秒数)
	fmt.Printf("当前时间:%s秒\n", now.Format("5"))

	fmt.Printf("当前时间:%d秒\n", now.Second())

	_, _, sec := now.Clock()
	fmt.Printf("当前时间:%d秒\n", sec)

	//YYYY-mm-dd HH:ii:ss
	fmt.Printf("当前时间:%s\n", now.Format("2006-01-02 15:04:05"))

	//YYYY/mm/dd HH:ii:ss
	fmt.Printf("当前时间:%s\n", now.Format("2006/01/02 15:04:05"))

	//获取指定日期的时间戳
	date := time.Date(2015, 04, 01, 13, 11, 11, 0, time.Local)
	fmt.Printf("%s的日期的时间戳:%d\n", date.Format("2006-01-02 15:04:05"), date.Unix())

	//指定时区
	prc := time.FixedZone("PRC", 8*3600) //注意第二个参数(基于UTC的秒数,8*3600为东八区)
	date1 := time.Date(2015, 04, 01, 13, 11, 11, 0, prc)
	fmt.Printf("%s的日期的时间戳:%d\n", date1.Format("2006-01-02 15:04:05"), date1.Unix())

	newDate := date.Add(2 * time.Second)
	fmt.Printf("%s两秒后的时间是:%s\n", date.Format("2006-01-02 15:04:05"), newDate.Format("2006-01-02 15:04:05"))

	newDate = date.Add(-2 * time.Second)
	fmt.Printf("%s两秒前的时间是:%s\n", date.Format("2006-01-02 15:04:05"), newDate.Format("2006-01-02 15:04:05"))

	newDate = date.Add(-2 * time.Minute * 60 * 24)
	fmt.Printf("%s两天前的时间是:%s\n", date.Format("2006-01-02 15:04:05"), newDate.Format("2006-01-02 00:00:00"))

	newDate = date.AddDate(0, 0, -2)
	fmt.Printf("%s两天前的时间是:%s\n", date.Format("2006-01-02 15:04:05"), newDate.Format("2006-01-02 00:00:00"))

	//2015-04-01 13:11:11 到现在经过的秒数
	fmt.Println(time.Now().Sub(date).Seconds())
	fmt.Println(time.Since(date).Seconds())

	if !time.Now().Before(date) {
		fmt.Printf("%s 小于当前时间\n", date.Format("2006-01-02 15:04:05"))
	}

	if time.Now().After(date) {
		fmt.Printf("%s 小于当前时间\n", date.Format("2006-01-02 15:04:05"))
	}

	if !time.Now().Equal(date) {
		fmt.Printf("%s 不等于当前时间\n", date.Format("2006-01-02 15:04:05"))
	}

	fmt.Printf("今天是当年第%d天\n", now.YearDay())
	fmt.Printf("今天是当月第%d日\n", now.Day())

	//休眠3秒
	time.Sleep(3 * time.Second)

}

以上代码可以直接编译运行,注意time包的Format方法的参数