Go Academy · บทเรียน

เขตเวลา

ทำงานกับตำแหน่งต่าง ๆ

บทเรียน 4 จาก 413 ขั้นตอน

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

เวลาเก็บข้อมูลเขตเวลาไว้

time.Time ทุกค่ามี เขตเวลา ที่เกี่ยวข้อง ขณะเวลาเดียวกันอาจแสดงแตกต่างกันไปตามเขตเวลา

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.Location())
}

UTC และเขตเวลาท้องถิ่น

มีเขตเวลาที่มีมาให้สองแบบและพร้อมใช้งานเสมอ:

  • time.UTC สำหรับเวลาสากลเชิงพิกัด
  • time.Local สำหรับเขตเวลาท้องถิ่นของเครื่อง
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.UTC().Hour())
}

การโหลดเขตเวลาที่มีชื่อ

time.LoadLocation(name) ค้นหาเขตเวลา IANA เช่น "Europe/Istanbul" หรือ "America/New_York"

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("UTC")
    fmt.Println(loc, err)
}

การแปลงเขตเวลาด้วย In

t.In(loc) คืนค่าขณะเวลาเดียวกันที่แสดงในเขตเวลาอื่น ช่วงเวลาที่อยู่เบื้องหลังไม่เปลี่ยนแปลง มีเพียงรูปแบบการแสดงผลเท่านั้นที่เปลี่ยน

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(time.UTC).Hour())
}

ขณะเวลาเดียวกัน แต่นาฬิกาต่างกัน

เที่ยงวันตาม UTC เป็นขณะเวลาเดียวกันเพียงหนึ่งเดียว แต่ผู้ดูในเขตเวลาอื่นจะเห็นชั่วโมงบนหน้าปัดต่างกัน ความแตกต่างจาก Sub ระหว่างทั้งสองค่าคือศูนย์

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    u := t.UTC()
    fmt.Println(t.Sub(u))
}

การสร้างเวลาในเขตเวลา

ส่งตำแหน่งเป็นอาร์กิวเมนต์สุดท้ายให้ time.Date เพื่อสร้างเวลาโดยตรงในเขตเวลานั้น

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, _ := time.LoadLocation("UTC")
    t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
    fmt.Println(t.Hour())
}

การอ่านค่าเหลื่อมของเขตเวลา

t.Zone() คืนค่าตัวย่อของเขตเวลาและค่าเหลื่อมจาก UTC ในหน่วยวินาที

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    name, offset := t.Zone()
    fmt.Println(name, offset)
}

เขตเวลาแบบคงที่

เมื่อไม่จำเป็นต้องใช้กฎ IANA อย่างครบถ้วน time.FixedZone(name, offsetSeconds) จะสร้างเขตเวลาที่มีค่าเหลื่อมคงที่อย่างง่าย

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
    name, off := t.Zone()
    fmt.Println(name, off)
}

การจัดรูปแบบข้ามเขตเวลา

แปลงค่าด้วย In ก่อนจัดรูปแบบ เพื่อแสดงการประทับเวลาในเขตเวลาของผู้อ่าน

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}

จัดเก็บเป็น UTC แสดงผลเป็นเวลาท้องถิ่น

แนวปฏิบัติที่ใช้กันอย่างแพร่หลายคือ จัดเก็บและคำนวณเป็น UTC แล้วแปลงเป็นเขตเวลาท้องถิ่นเฉพาะเมื่อต้องแสดงเวลาให้ผู้ใช้ วิธีนี้ช่วยหลีกเลี่ยงความกำกวม

package main

import (
    "fmt"
    "time"
)

func main() {
    stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT+2", 2*3600)
    fmt.Println("shown:", stored.In(loc).Hour())
}

การจัดการข้อผิดพลาดจากการโหลด

LoadLocation อาจทำงานไม่สำเร็จหากไม่มีฐานข้อมูลเขตเวลาหรือไม่รู้จักชื่อเขตเวลา ควรตรวจสอบข้อผิดพลาดเสมอ

package main

import (
    "fmt"
    "time"
)

func main() {
    _, err := time.LoadLocation("Mars/Olympus")
    if err != nil {
        fmt.Println("unknown zone")
    }
}

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

t.In(loc) เปลี่ยนแปลงอะไร

สรุปทบทวน: เขตเวลา

คุณได้เรียนรู้การทำงานกับตำแหน่งแล้ว:

  • เวลาทุกค่ามีตำแหน่ง โดยมี UTC และ Local ให้ใช้ในตัว
  • โหลดเขตเวลาที่มีชื่อด้วย LoadLocation หรือสร้างค่าเหลื่อมด้วย FixedZone
  • แปลงด้วย In จัดเก็บเป็น UTC และแสดงผลเป็นเวลาท้องถิ่น
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT-5", -5*3600)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}
เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

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

บทเรียน “เขตเวลา” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เขตเวลา”

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

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

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

บทเรียน “เขตเวลา” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เวลาและระยะเวลา
  2. การจัดรูปแบบและการแยกวิเคราะห์
  3. ตัวจับเวลาและตัวนับเวลา
  4. เขตเวลา
← กลับไปที่ Go Academy