เขตเวลา
ทำงานกับตำแหน่งต่าง ๆ
เขตเวลา เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ