0Pricing
Go Academy · บทเรียน

พื้นฐานแพ็กเกจ time

ใช้งานเวลา ช่วงเวลา และการจัดรูปแบบ

พื้นฐานแพ็กเกจ time เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

time.Time — ชนิดข้อมูลหลัก

ชนิดข้อมูลหลักของแพ็กเกจ time คือ time.Time รับเวลาปัจจุบันด้วย time.Now():

package main
import ("fmt"; "time")

func main() {
    now := time.Now()
    fmt.Println(now)              // 2024-01-15 10:30:00.123456789 +0000 UTC
    fmt.Println(now.Year())       // 2024
    fmt.Println(now.Month())      // January
    fmt.Println(now.Day())        // 15
    fmt.Println(now.Hour())       // 10
    fmt.Println(now.Minute())     // 30
    fmt.Println(now.Weekday())    // Monday
}

time.Duration

time.Duration ใช้แทนระยะเวลาที่ผ่านไปในหน่วยนาโนวินาที ควรใช้ค่าคงที่ที่มีชนิดข้อมูลเพื่อให้อ่านได้ง่าย:

package main
import ("fmt"; "time")

func main() {
    d := 2*time.Hour + 30*time.Minute + 15*time.Second
    fmt.Println(d)              // 2h30m15s
    fmt.Println(d.Hours())      // 2.504166...
    fmt.Println(d.Minutes())    // 150.25
    fmt.Println(d.Seconds())    // 9015
    fmt.Println(d.Milliseconds()) // 9015000
}

time.Add และ time.Sub

เพิ่มระยะเวลาให้กับเวลา หรือลบเวลาสองค่าเพื่อหาระยะเวลา:

package main
import ("fmt"; "time")

func main() {
    now := time.Now()

    tomorrow := now.Add(24 * time.Hour)
    fmt.Println(tomorrow.Format("2006-01-02"))

    deadline := now.Add(30 * time.Minute)
    remaining := time.Until(deadline)  // alias for deadline.Sub(now)
    fmt.Printf("%.0f minutes left\n", remaining.Minutes())
}

การจัดรูปแบบและการแยกวิเคราะห์เวลา

Go ใช้เวลาอ้างอิง Mon Jan 2 15:04:05 MST 2006 เป็นแม่แบบการจัดรูปแบบ (ค่าตั้งแต่ 1 ถึง 7 ตามลำดับ):

package main
import ("fmt"; "time")

func main() {
    now := time.Now()

    // Format
    fmt.Println(now.Format("2006-01-02"))          // 2024-01-15
    fmt.Println(now.Format("02/01/2006 15:04:05")) // 15/01/2024 10:30:00
    fmt.Println(now.Format(time.RFC3339))          // 2024-01-15T10:30:00Z
    fmt.Println(now.Format(time.Kitchen))          // 10:30AM
}

time.Parse — การแยกวิเคราะห์สตริง

แปลงสตริงเป็น time.Time โดยใช้แม่แบบเวลาอ้างอิงเดียวกัน:

package main
import ("fmt"; "time")

func main() {
    s := "2024-01-15"
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        fmt.Println("parse error:", err)
        return
    }
    fmt.Println(t.Year(), t.Month(), t.Day()) // 2024 January 15

    // Parse RFC3339 (ISO 8601):
    t2, _ := time.Parse(time.RFC3339, "2024-01-15T10:30:00Z")
    fmt.Println(t2)
}

time.Sleep และตัวจับเวลา

หยุดการทำงานชั่วคราวด้วย time.Sleep และสร้างตัวจับเวลาแบบทำงานครั้งเดียวด้วย time.NewTimer:

package main
import ("fmt"; "time")

func main() {
    start := time.Now()
    time.Sleep(100 * time.Millisecond)
    fmt.Printf("slept for %v\n", time.Since(start))

    // One-shot timer
    timer := time.NewTimer(200 * time.Millisecond)
    <-timer.C  // blocks until timer fires
    fmt.Println("timer fired")
}

time.Ticker สำหรับเหตุการณ์ที่เกิดซ้ำ

time.NewTicker จะส่งค่าผ่านช่องสัญญาณตามช่วงเวลาที่กำหนดอย่างสม่ำเสมอ:

package main
import ("fmt"; "time")

func main() {
    ticker := time.NewTicker(500 * time.Millisecond)
    defer ticker.Stop()  // always stop to avoid goroutine leak

    for i := 0; i < 3; i++ {
        t := <-ticker.C
        fmt.Println("tick at", t.Format("15:04:05.000"))
    }
}

time.Since และ time.Until

ทางลัดที่สะดวกสำหรับวัดเวลาที่ผ่านไปและเวลาที่เหลือจนกว่าจะเกิดเหตุการณ์:

package main
import ("fmt"; "time")

func benchmark(fn func()) time.Duration {
    start := time.Now()
    fn()
    return time.Since(start)  // = time.Now().Sub(start)
}

func main() {
    d := benchmark(func() { time.Sleep(50 * time.Millisecond) })
    fmt.Printf("took %v\n", d)

    deadline := time.Now().Add(5 * time.Minute)
    fmt.Printf("%.0f minutes remaining\n", time.Until(deadline).Minutes())
}

เขตเวลา

Go จัดการเขตเวลาด้วย time.Location โหลดเขตเวลาด้วย time.LoadLocation:

package main
import ("fmt"; "time")

func main() {
    utc := time.Now().UTC()
    fmt.Println(utc)

    loc, err := time.LoadLocation("America/New_York")
    if err != nil { panic(err) }
    nyTime := utc.In(loc)
    fmt.Println(nyTime)

    // Compare times — always in UTC internally
    fmt.Println(utc.Equal(nyTime)) // true — same instant
}

time.Unix — ค่าประทับเวลา Unix

แปลงระหว่าง time.Time กับค่าประทับเวลา Unix:

package main
import ("fmt"; "time")

func main() {
    now := time.Now()
    unix := now.Unix()            // seconds since epoch
    unixMilli := now.UnixMilli()  // milliseconds
    unixNano := now.UnixNano()    // nanoseconds

    fmt.Println(unix, unixMilli, unixNano)

    // Convert back:
    t := time.Unix(unix, 0)
    fmt.Println(t.Format(time.RFC3339))
}

ตรวจสอบความเข้าใจ

Go ใช้เวลาอ้างอิงใดเป็นแม่แบบการจัดรูปแบบ

ทบทวน: แพ็กเกจ time

สรุป:

  • time.Now() — เวลาปัจจุบัน ส่วนประกอบต่าง ๆ เรียกดูได้ผ่าน .Year(), .Month() เป็นต้น
  • time.Duration — หน่วยนาโนวินาที ให้ใช้ time.Hour, time.Minute เป็นต้น
  • t.Format(layout) / time.Parse(layout, s) — การจัดรูปแบบใช้เวลาอ้างอิง 2006-01-02 15:04:05
  • time.Since / time.Until สำหรับเวลาที่ผ่านไปและเวลาที่เหลือ
  • time.NewTicker สำหรับเหตุการณ์ตามช่วงเวลา — ให้ใช้ defer Stop() เสมอ

คำถามที่พบบ่อย

บทเรียน “พื้นฐานแพ็กเกจ time” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐานแพ็กเกจ time” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐานแพ็กเกจ time”

ใช้งานเวลา ช่วงเวลา และการจัดรูปแบบ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐานแพ็กเกจ time” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แพ็กเกจ fmt และ strings
  2. strconv, math และ sort
  3. พื้นฐานแพ็กเกจ time
  4. แพ็กเกจ os และ filepath
← กลับไปที่ Go Academy