简介
一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库time使用起来不太灵活,特别是日期时间的创建和运算。carbon库是一个时间扩展库,基于 PHP 的carbon库编写。提供易于使用的接口。本文就来介绍一下这个库。
快速使用
第三方库需要先安装:
代码语言:javascript复制$ go get github.com/uniplaces/carbon
后使用:
代码语言:javascript复制package main
import (
"fmt"
"time"
"github.com/uniplaces/carbon"
)
func main() {
fmt.Printf("Right now is %sn", carbon.Now().DateTimeString())
today, _ := carbon.NowInLocation("Japan")
fmt.Printf("Right now in Japan is %sn", today)
fmt.Printf("Tomorrow is %sn", carbon.Now().AddDay())
fmt.Printf("Last week is %sn", carbon.Now().SubWeek())
nextOlympics, _ := carbon.CreateFromDate(2016, time.August, 5, "Europe/London")
nextOlympics = nextOlympics.AddYears(4)
fmt.Printf("Next olympics are in %dn", nextOlympics.Year())
if carbon.Now().IsWeekend() {
fmt.Printf("Happy time!")
}
}
carbon
库的使用很便捷,首先它完全兼容标准库的time.Time
类型,实际上该库的日期时间类型Carbon
直接将time.Time
内嵌到结构中,所以time.Time
的方法可直接调用:
// src/github.com/uniplaces/carbon/carbon.go
type Carbon struct {
time.Time
weekStartsAt time.Weekday
weekEndsAt time.Weekday
weekendDays []time.Weekday
stringFormat string
Translator *Translator
}
其次,简化了创建操作。标准库time
创建一个Time
对象,如果不是本地或 UTC 时区,需要自己先调用LoadLocation
加载对应时区。然后将该时区对象传给time.Date
方法创建。carbon
可以直接传时区名字。
carbon
还提供了很多方法做日期运算,如例子中的AddDay
,SubWeek
等,都是见名知义的。
时区
在介绍其它内容之前,我们先说一说这个时区的问题。以下引用维基百科的描述:
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。 世界各国位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
例如,日本东京位于东九区,北京位于东八区,所以日本比中国快一个小时,日本14:00的时候中国13:00。
在 Linux 中,时区一般存放在类似/usr/share/zoneinfo
这样的目录。这个目录中有很多文件,每个时区一个文件。时区文件是二进制文件,可以执行info tzfile
查看具体格式。
时区名称的一般格式为city
,或country/city
,或continent/city
。即要么就是一个城市名,要么是国家名 / 城市名,要么是洲名 / 城市名。例如上海时区为Asia/Shanghai
,中国香港时区为Asia/Hong_Kong
。也有一些特殊的,如 UTC,Local等。
Go 语言为了可移植性,在安装包中提供了时区文件,在安装目录下(我的为C:Go
)的lib/time/zoneinfo.zip
文件,大家可以执行解压看看