Go با مثال: قالب‌بندی و تجزیهٔ زمان

Go از قالب‌بندی و تجزیهٔ (parse) زمان با الگوهای مبتنی بر نمونه (layout) پشتیبانی می‌کند.

package main
import (
    "fmt"
    "time"
)
func main() {
    p := fmt.Println

این مثال ساده‌ای از قالب‌بندی زمان طبق RFC3339 است، با استفاده از ثابتِ layout متناظر.

    t := time.Now()
    p(t.Format(time.RFC3339))

تجزیهٔ زمان از همان مقادیر layout که Format استفاده می‌کند بهره می‌برد.

    t1, _ := time.Parse(time.RFC3339, "2012-11-01T22:08:41+00:00")
    p(t1)

Format و Parse از layoutهای مبتنی بر نمونه استفاده می‌کنند. معمولاً برای این layoutها از یک ثابت در time استفاده می‌کنید، اما می‌توانید layout سفارشی هم بدهید. layoutها باید از زمان مرجع Mon Jan 2 15:04:05 MST 2006 استفاده کنند تا الگوی قالب‌بندی/تجزیهٔ زمان یا رشته را نشان دهند. زمان نمونه باید دقیقاً همین باشد: سال 2006، ساعت 15، روز دوشنبه (Monday) و غیره.

    p(t.Format("3:04PM"))
    p(t.Format("Mon Jan _2 15:04:05 2006"))
    p(t.Format("2006-01-02T15:04:05.999999-07:00"))
    form := "3 04 PM"
    t2, _ := time.Parse(form, "8 41 PM")
    p(t2)

برای نمایش‌های کاملاً عددی می‌توانید از قالب‌بندی استاندارد رشته با اجزای استخراج‌شده از مقدار زمان هم استفاده کنید.

    fmt.Printf("%d-%02d-%02dT%02d:%02d:%02d-00:00\n",
        t.Year(), t.Month(), t.Day(),
        t.Hour(), t.Minute(), t.Second())

Parse برای ورودی نادرست خطایی برمی‌گرداند که مشکل تجزیه را توضیح می‌دهد.

    _, err := time.Parse("Mon Jan _2 15:04:05 2006", "8:41PM")
    p(err)
}
$ go run time-formatting-parsing.go 
2014-04-15T18:00:15-07:00
2012-11-01 22:08:41 +0000 +0000
6:00PM
Tue Apr 15 18:00:15 2014
2014-04-15T18:00:15.161182-07:00
0000-01-01 20:41:00 +0000 UTC
2014-04-15T18:00:15-00:00
parsing time "8:41PM" as "Mon Jan _2 15:04:05 2006": ...

مثال بعدی: .