GoFrame架構的gtime模組和自訂時間格式化文法的分析

來源:互聯網
上載者:User
這篇文章給大家分享的內容是關於GoFrame架構之gtime時間模組和支援自訂時間格式化文法,有一定的參考價值,有需要的朋友可以參考一下。

通用時間管理模組,封裝了常用的時間/日期相關的方法。並支援自訂的日期格式化文法,格式化文法類似PHP的date文法。

使用方式:

import "gitee.com/johng/gf/g/os/gtime"

方法列表: godoc.org/github.com/johng-cn/gf/g/os/gtime

時間格式

gtime模組最大的特點是支援自訂的時間格式,參考PHP日期時間格式文法,以下是支援的時間格式文法列表:

時間對象

方法列表:

type Time    func New(t ...time.Time) *Time    func NewFromStr(str string) *Time    func NewFromStrFormat(str string, format string) *Time    func NewFromStrLayout(str string, layout string) *Time    func NewFromTime(t time.Time) *Time    func NewFromTimeStamp(timestamp int64) *Time    func Now() *Time    func (t *Time) Add(d time.Duration) *Time    func (t *Time) AddDate(years int, months int, days int) *Time    func (t *Time) Clone() *Time    func (t *Time) Format(format string) string    func (t *Time) Layout(layout string) string    func (t *Time) Local() *Time    func (t *Time) Microsecond() int64    func (t *Time) Millisecond() int64    func (t *Time) Nanosecond() int64    func (t *Time) Round(d time.Duration) *Time    func (t *Time) Second() int64    func (t *Time) String() string    func (t *Time) ToLocation(location *time.Location) *Time    func (t *Time) ToTime() time.Time    func (t *Time) Truncate(d time.Duration) *Time    func (t *Time) UTC() *Time

建立gtime.Time對象可以通過標準庫time.Time對象、Unix時間戳記、時間字串(如:2018-07-18 12:01:00)、自訂時間字串(需要給定格式,支援自訂格式及標準庫格式)。

樣本1,自訂時間格式化文法

package mainimport (    "fmt"    "gitee.com/johng/gf/g/os/gtime")func main() {    formats := []string{        "Y-m-d H:i:s.u",        "D M d H:i:s T O Y",        "\\T\\i\\m\\e \\i\\s: h:i:s a",        "2006-01-02T15:04:05.000000000Z07:00",    }    t := gtime.Now()    for _, f := range formats {        fmt.Println(t.Format(f))    }}

在該樣本中,我們給定了四種format格式,並將目前時間用這四種格式轉換後列印出來。執行後,輸出結果如下:

2018-07-22 11:17:13.797Sun Jul 22 11:17:13 CST +0800 2018Time is: 11:17:13 am2006-01-02CST15:04:05.000000000Z07:00

可以看到,這個樣本示範了幾個需要注意的地方:

  1. 如果使用的字母與格式化字元衝突時,可以使用\符號轉移該字元,這樣時間格式解析器會認為該字元不是格式化字元,而是普通字母。因此這裡的第三個字串樣本輸出為:Time is: 11:17:13 am

  2. 使用Format方法接收的是自訂的時間格式化文法(如:Y-m-d H:i:s),而不是標準庫的事件格式文法(如:2006-01-02 15:04:05),且兩種文法不能混用,因此在這裡的第四個字串樣本中原樣輸出參數值;

樣本2,標準庫時間格式化文法

package mainimport (    "fmt"    "gitee.com/johng/gf/g/os/gtime")func main() {    formats := []string{        "2006-01-02 15:04:05.000",        "Mon Jan _2 15:04:05 MST 2006",        "Time is: 03:04:05 PM",        "2006-01-02T15:04:05.000000000Z07:00 MST",    }    t := gtime.Now()    for _, f := range formats {        fmt.Println(t.Layout(f))    }}

在該樣本中,我們使用四種標準庫的時間格式化文法格式化當前的時間並輸出結果到終端。執行後,輸出結果為:

2018-07-22 11:28:13.945Sun Jul 22 11:28:13 CST 2018Time is: 11:28:13 AM2018-07-22T11:28:13.945153275+08:00 CST

根絕這個樣本,也有幾個需要說明的地方:

  1. 自訂時間格式化文法與標準庫時間格式化文法並不衝突,前者使用Format方法,後者使用Layout文法進行格式化,相互獨立,互不衝突,無法混用;

  2. 標準庫的時間格式化文法自有特點,是不是感覺有點複雜;

樣本3,時間對象鏈式操作

package mainimport (    "fmt"    "gitee.com/johng/gf/g/os/gtime"    "time")func main() {    // 去年今日    fmt.Println(gtime.Now().AddDate(-1, 0, 0).Format("Y-m-d"))    // 去年今日,UTC時間    fmt.Println(gtime.Now().AddDate(-1, 0, 0).Format("Y-m-d H:i:s T"))    fmt.Println(gtime.Now().AddDate(-1, 0, 0).UTC().Format("Y-m-d H:i:s T"))    // 下個月1號淩晨0點整    fmt.Println(gtime.Now().AddDate(0, 1, 0).Format("Y-m-d 00:00:00"))    // 2個小時前    fmt.Println(gtime.Now().Add(-time.Hour).Format("Y-m-d H:i:s"))}

執行後,輸出結果為:

2017-07-222017-07-22 11:42:36 CST2017-07-22 03:42:36 UTC2018-08-22 00:00:002018-07-22 10:42:36

該樣本比較簡單,便不多贅述。

工具方法

godoc.org/github.com/johng-cn/gf/g/os/gtime

func Date() stringfunc Datetime() stringfunc Microsecond() int64func Millisecond() int64func Nanosecond() int64func Second() int64func SetInterval(t time.Duration, callback func() bool)func SetTimeZone(zone string) errorfunc SetTimeout(t time.Duration, callback func())func StrToTime(str string) (time.Time, error)func StrToTimeFormat(str string, format string) (time.Time, error)func StrToTimeLayout(str string, layout string) (time.Time, error)

方法比較簡單,比較常用的是以下幾個方法;

  1. Second用於獲得目前時間戳,MillisecondMicrosecondNanosecond用於獲得當前的毫秒、微秒和納秒值;

  2. DateDatetime用於獲得當前日期及當前日期時間;

  3. SetTimeZone用於設定當前進程的全域時區;

  4. 其他方法說明請查看介面文檔;

簡單樣本:

package mainimport (    "fmt"    "gitee.com/johng/gf/g/os/gtime")func main() {    fmt.Println("Date       :", gtime.Date())    fmt.Println("Datetime   :", gtime.Datetime())    fmt.Println("Second     :", gtime.Second())    fmt.Println("Millisecond:", gtime.Millisecond())    fmt.Println("Microsecond:", gtime.Microsecond())    fmt.Println("Nanosecond :", gtime.Nanosecond())}

執行後,輸出結果為:

Date       : 2018-07-22Datetime   : 2018-07-22 11:52:22Second     : 1532231542Millisecond: 1532231542688Microsecond: 1532231542688688Nanosecond : 1532231542688690259
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.