1: เริ่มต้นกับ Carbon

1.1 บทนำ

เป็นแพ็กเกจที่เข้าใจง่ายและเป็นมิตรต่อนักพัฒนาในภาษาโปรแกรมกอลอง

ประโยชน์ของการใช้ Carbon สำหรับการจัดการช่วงเวลา:

  • เป็นมิตรต่อนักพัฒนา: Carbon มีอินเทอร์เฟซที่ไหลไปด้วยการแก้ไขให้กับวันที่ที่ใกล้ชิดและการแสดงออกที่เข้าใจได้สำหรับนักพัฒนา
  • สนับสนุนการเปลี่ยนเวลา: สนับสนุนการเปลี่ยนเวลาที่อนุรักษ์ไว้ด้วยการแสดงเป็นวันที่พื้นฐาน
  • ความไม่เปลี่ยนแปลง: ตัวอย่างของ Carbon เป็นความไม่เปลี่ยนแปลงที่เป็นที่ความปลอดภัย นีย่าสามารถถูกส่งต่อไปอย่างปลอดภัยโดยไม่มีการแก้ไขที่ไม่คาดฝัน
  • การจัดการโซนเวลา: Carbon ทำให้ความซับซ้อนของการจัดการวันที่จำกัดในโซนเวลาที่แตกต่างกันลดลง
  • เริ่มต้น API: ให้ชุดคำสั่งที่ครอบคลุมมากขึ้นสำหรับสร้างฟังก์ชันการทำงานการําเพื่อกลุ่มดาวเวลาของ และการจัดรูปแบบวันและเวลา

1.2 คู่มือการติดตั้ง

การติดตั้งสำหรับ Go เวอร์ชั่น >= 1.16

เพื่อที่จะติดตั้งแพ็คเกจของ Carbon สำหรับ Go เวอร์ชั่น 1.16 หรือสูงกว่านั้น ให้ใช้คำสั่งต่อไปนี้:

go get -u github.com/golang-module/carbon/v2

จากนั้น นำแพ็คเกจเข้าไปในไฟล์ Go ของคุณ:

import "github.com/golang-module/carbon/v2"

การติดตั้งสำหรับ Go เวอร์ชั่น < 1.16

สำหรับเวอร์ชั่นเก่าของ Go, คุณยังสามารถติดตั้ง Carbon โดยใช้:

go get -u github.com/golang-module/carbon

และนำเข้ามันเช่นเดียวกัน:

import "github.com/golang-module/carbon"

โปรดทราบว่า v1 ไม่ได้รับการปรับปรุงอย่างใหม่ แต่จะมีการสนับสนุนในการแก้บั๊ก

1.3 การเซ็ตโปรเจ็กต์ Carbon ครั้งแรกของคุณ

การกำหนดค่าพื้นฐานของ Carbon: เมื่อ Carbon ถูกติดตั้งแล้ว คุณสามารถเริ่มใช้ได้โดยการสร้างตัวแทน Carbon ใหม่ๆโดยตรง คุณสามารถปรับแต่ง Carbon โดยการกำหนดรูปแบบของตัวแทนค่าเริ่มต้นโลกัลและภาษาให้เข้ากับความต้องการของโปรเจ็กต์ของคุณ

การกำหนดรูปแบบเริ่มต้นโลกัลขึ้น:

carbon.SetDefault(carbon.Default{
  Layout: carbon.RFC3339Layout,
  Timezone: carbon.PRC,
  Locale: "en",
})

หากไม่ได้รับการตั้งค่าโดยชัดเจน Carbon มีการตั้งค่าเริ่มต้นสำหรับเหล่านี้ — Layout: "2006-01-02 15:04:05", Timezone: Local, Locale: "en".

2: การดำเนินการเบื้องต้นของ Carbon

2.1 การทำงานกับเวลาปัจจุบัน

การเรียกวันที่เวลาปัจจุบัน

การเรียกวันที่และเวลาปัจจุบันเป็นการดำเนินการรากฐานของไอ้แพลปิเคชั่นหลายอย่าง ด้วย Carbon, คุณสามารถเข้าถึงตัวโปรแกรม datetime ปัจจุบันโดยการใช้เมอธอด carbon.Now() ดูตัวอย่างการเรียกวันที่ปัจจุบัน:

// ดูตัวอย่างการเรียกวันที่และเวลาปัจจุบันเป็นตัวโปรแกรม
now := carbon.Now()

fmt.Println("Current datetime:", now)

การแสดงวันที่วันนี้ เมื่อวาน และพรุ่งนี้

Carbon จะสามารถให้วิธีการทำงานที่สง่างามกับวันที่ที่เกี่ยวข้องกับวันนี้ โดยให้เมอธอด carbon.Now() carbon.Yesterday() and carbon.Tomorrow() ตามลำดับ ดูตัวอย่างการใช้งานกับวันที่วันนี้,เมื่อวาน และพรุ่งนี้:

// วันที่ปัจจุบัน
today := carbon.Now()
fmt.Println("Today:", today.ToDateTimeString())

// วันที่เมื่อวาน
yesterday := carbon.Yesterday()
fmt.Println("Yesterday:", yesterday.ToDateTimeString())

// วันที่พรุ่งนี้
tomorrow := carbon.Tomorrow()
fmt.Println("Tomorrow:", tomorrow.ToDateTimeString())

เมอธอดเหล่านี้ให้วิธีที่สรุปกับการทำงานนี้คุณมีแหล่งอ้างอิงวันที่ที่สำคัญที่สม่ำเสมอโดยไม่ต้องคำนวณเองเอง

การจัดรูปแบบและการแสดงเวลาปัจจุบัน

Carbon ผนวกรินิติเคียงต่างๆที่จะตัดแต่งและแสดงวันที่และเวลา ไมว่าคุณจะให้วิธีแสดงที่มาตรฐานอย่าง ISO8601 หรือหากคุณต้องการแบบที่พากาศจากตามท้องถิ่น

นี่คือวิธีง่ายการจัดรูปแบบวันที่ปัจจุบันถาวรๆ:

// การแสดงวันที่และเวลาที่มีมาตรฐาน
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())

// การแสดงรูปแบบที่กำหนดเอง
fmt.Println("Custom:", now.Format("Monday, 02-Jan-06 15:04:05 MST"))

// การใช้รูปแบบที่ถูกกำหนดไว้ล่วงหน้า
fmt.Println("ANSIC format:", now.ToAnsicString())
fmt.Println("UnixDate format:", now.ToUnixDateString())
fmt.Println("RubyDate format:", now.ToRubyDateString())
fmt.Println("Kitchen format:", now.ToKitchenString())

// สำหรับรูปแบบที่กำหนดเอง ให้ใช้วิธี Format
fmt.Println("Custom pattern:", now.Format("2006-01-02 3:04 PM"))

2.2 การสร้างตัวบ่งประมาณของ Carbon

สร้างอินสแตนซ์จากแม่เวลา

ใน Go, การจัดการกับแม่เวลาเป็นเรื่องที่พบบ่อย และ Carbon มีเมทอดที่ใช้อย่างสะดวกสบายในการจัดการกับมัน แม่เวลาคือลำดับของตัวอักษรหรือข้อมูลที่ถูกเข้ารหัสที่ระบุเมื่อเกิดเหตุการณ์ที่ต้องการ โดยทั่วไปจะระบุวันที่และเวลาของวัน โดยบางครั้งมีความแม่นยำถึงแม่วินาที

เพื่อสร้างอินสแตนซ์ Carbon จาก Unix timestamp ซึ่งแทนจำนวนวินาทีที่ผ่านไปตั้งแต่เริ่มต้นของ Unix (เที่ยงคืนของวันที่ 1 มกราคม 1970, UTC) คุณสามารถใช้ระดับความแม่นยำต่าง ๆ ได้:

// สร้างอินสแตนซ์ Carbon จาก timestamp ที่กำหนด ด้วยความแม่นยำของวินาที
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // แสดง: "202-08-05 13:14:15 +080 CST"

// สำหรับความแม่นยำที่สูงขึ้น (มิลลิวินาที) ให้ใช้ `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // แสดง: "202-08-05 13:14:15.999 +080 CST"

// สำหรับไมโครวินาที ให้ใช้ `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // แสดง: "202-08-05 13:14:15.999999 +080 CST"

// และสำหรับเนนโตวินาที ให้ใช้ `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // แสดง: "202-08-05 13:14:15.999999999 +080 CST"

สร้างอินสแตนซ์จากส่วนประกอบของวันที่และเวลา

หากคุณมีส่วนประกอบของวันที่อย่างต่างหาก เช่น ปี เดือน และวัน หรือส่วนประกอบของเวลาเช่น ชั่วโมง นาที และวินาที Carbo สามารถจัดการกับเหล่านี้ได้เช่นเช่นกัน

// สร้างอินสแตนซ์ Carbon จากวันที่ที่กำหนดเท่านั้น
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // แสดง: "2022-12-25"

// สร้างอินสแตนซ์ Carbon จากเวลาที่กำหนดเท่านั้น
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // แสดง: "23:59:59"

// สร้างอินสแตนซ์ Carbon จากทั้งวันที่และเวลา
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // แสดง: "2022-12-25 23:59:59"

2.3 การแปลงสตริงเป็นเวลา

การจัดการกับการแสดงเวลาและวันที่เป็นสตริงเป็นสถานการณ์ที่พบบ่อย Carbon ทำให้สะดวกต่อการแปลงสตริงเป็นอินสแตนส์ของ Carbo

การใช้ carbon.Parse สำหรับรูปแบบเวลามาตรฐาน:

// แปลงสตริงที่มีวันที่และเวลา
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
    fmt.Printf("ผิดพลาด: %v", c.Error)
} else {
    fmt.Println(c.ToDateTimeString()) // แสดง: "202-08-05 13:14:15"
}

// แปลงสตริงที่มีรูปแบบ RFC3339
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // แสดง: "202-08-05 13:14:15 +080 CST"

รูปแบบที่กำหนดเองด้วย ParseByFormat และ ParseByLayout

คุณสามารถแปลงสตริงที่อยู่ในรูปแบบที่ไม่ได้รับการจัดการโดยตรงโดย carbon.Parse ได้เช่นเดียวกัน

// แปลงสตริงที่มีเวลาเป็นอินสแตนซ์ Carbon โดยใช้รูปแบบ
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // แสดง: "202-08-05 13:14:15"

// แปลงสตริงที่มีเวลาเป็นอินสแตน์ Carbon โดยใช้เลย์เอาท์
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // แสดง: "202-08-05"

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

อย่าลืมตรวจสอบฟิลด์ Error เสมอเพื่อให้มั่นใจว่าการแปลงเป็นสำเร็จ:

invalidDate := carbon.Parse("นี่ไม่ใช่วันที่", carbon.PRC)
if invalidDate.IsInvalid() {
    fmt.Println("ข้อผิดพลาดในการแปลงวันที่:", invalidDate.Error)
}

จำไว้ว่าการตรวจสอบข้อผิดพลาดอย่างเข้มงวดเป็นส่วนสำคัญของการทำงานกับวันที่และเวลาเพื่อป้องกันผลลัพธ์ที่ไม่คาดคิดหรือการล้มเหลวของระบบ