1: Bắt đầu với Carbon

1.1 Giới thiệu

Một gói golang đơn giản, ngữ cảnh và thân thiện với nhà phát triển cho xử lý ngày giờ.

Các lợi ích khi sử dụng Carbon cho việc xử lý ngày giờ:

  • Thân thiện với nhà phát triển: Carbon cung cấp giao diện trôi chảy và dễ hiểu để xử lý ngày giờ mà dễ tiếp thu với nhà phát triển.
  • Hỗ trợ quốc tế: Hỗ trợ quốc tế, cho phép bạn địa phương hóa biểu diễn ngày tháng của bạn.
  • Tính không thay đổi: Các thể hiện Carbon là thể hiện không thay đổi, có nghĩa là chúng có thể được truyền đi mà không có sự thay đổi đáng kể nào.
  • Xử lý múi giờ: Carbon giúp đơn giản hóa sự phức tạp của việc quản lý ngày giờ qua các múi giờ khác nhau.
  • API Phong phú: Cung cấp một bộ hàm toàn diện để tạo, phân tích cú pháp và định dạng ngày giờ.

1.2 Hướng dẫn cài đặt

Cài đặt cho phiên bản Go >= 1.16

Để cài đặt gói Carbon cho phiên bản Go 1.16 trở lên, sử dụng lệnh sau:

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

Sau đó, nhập gói vào tệp Go của bạn:

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

Cài đặt cho phiên bản Go < 1.16

Đối với các phiên bản cũ hơn của Go, bạn vẫn có thể cài đặt Carbon bằng cách sử dụng:

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

Và nhập nó tương tự:

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

Lưu ý rằng v1 không còn được cập nhật tích cực, nhưng nó sẽ được duy trì cho việc sửa lỗi.

1.3 Thiết lập Dự án Carbon đầu tiên của Bạn

Cấu hình cơ bản của Carbon: Sau khi cài đặt Carbon, bạn có thể bắt đầu sử dụng nó chỉ bằng cách tạo một thể hiện Carbon mới. Bạn có thể tùy chỉnh Carbon bằng cách thiết lập bố cục mặc định toàn cầu, múi giờ và ngôn ngữ địa phương để phù hợp với nhu cầu của dự án của bạn.

Thiết lập bố cục mặc định toàn cầu, múi giờ và ngôn ngữ địa phương:

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

Nếu không được thiết lập một cách rõ ràng, Carbon có các thiết lập mặc định cho này — Layout: "2006-01-02 15:04:05", Timezone: Local, Locale: "en".

2: Các Hoạt động Cơ bản với Carbon

2.1 Làm việc với Thời gian Hiện tại

Lấy Ngày và Giờ Hiện tại

Lấy ngày và giờ hiện tại là một thao tác cơ bản trong nhiều ứng dụng. Với Carbon, bạn có thể có được thể hiện ngày giờ hiện tại bằng cách gọi phương thức carbon.Now(). Hãy xem cách lấy ngày giờ hiện tại:

// Lấy thể hiện ngày giờ hiện tại như một Carbon.
now := carbon.Now()

fmt.Println("Ngày giờ hiện tại:", now)

Hiển thị Hôm nay, Hôm qua, và Ngày mai

Carbon cung cấp một cách thanh lịch để làm việc với các ngày liên quan đến ngày hiện tại. Để có biểu diễn ngày giờ của hôm nay, hôm qua và ngày mai, bạn có thể sử dụng các phương thức carbon.Now(), carbon.Yesterday(), và carbon.Tomorrow() tương ứng:

// Ngày giờ của hôm nay
today := carbon.Now()
fmt.Println("Hôm nay:", today.ToDateTimeString())

// Ngày giờ của hôm qua
yesterday := carbon.Yesterday()
fmt.Println("Hôm qua:", yesterday.ToDateTimeString())

// Ngày giờ của ngày mai
tomorrow := carbon.Tomorrow()
fmt.Println("Ngày mai:", tomorrow.ToDateTimeString())

Các phương thức cung cấp một cách ngắn gọn để tương tác với những tham chiếu ngày thông dụng này mà không cần tính toán thủ công.

Định dạng và Biểu diễn của Thời gian Hiện tại

Carbon hỗ trợ các cách khác nhau để định dạng và hiển thị ngày giờ. Cho dù bạn cần một định dạng chuẩn như ISO8601, một định dạng tùy chỉnh hoặc một phiên bản địa phương hóa, Carbon đều có các phương thức để phù hợp với những yêu cầu này.

Dưới đây là cách bạn có thể định dạng ngày giờ hiện tại theo các cách khác nhau:

// Biểu diễn ngày giờ chuẩn
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())

// Định dạng ngày giờ tùy chỉnh
fmt.Println("Tùy chỉnh:", now.Format("Thứ Hai, 02-Jan-06 15:04:05 MST"))

// Sử dụng bố cục được định sẵn
fmt.Println("Định dạng ANSIC:", now.ToAnsicString())
fmt.Println("Định dạng UnixDate:", now.ToUnixDateString())
fmt.Println("Định dạng RubyDate:", now.ToRubyDateString())
fmt.Println("Định dạng Kitchen:", now.ToKitchenString())

// Đối với mẫu tùy chỉnh, sử dụng phương thức Format
fmt.Println("Mẫu tùy chỉnh:", now.Format("2006-01-02 3:04 PM"))

Tạo các instance từ timestamps

Trong Go, xử lý timestamps là thường xuyên, và Carbon cung cấp các phương pháp trực quan để xử lý chúng. Một timestamp là một chuỗi ký tự hoặc thông tin mã hóa xác định khi một sự kiện cụ thể diễn ra, thường cung cấp ngày tháng và thời gian trong một ngày, đôi khi chính xác đến một phần nhỏ của một giây.

Để tạo một instance Carbon từ Unix timestamp, mô tả số giây đã trôi qua kể từ epoch Unix (nửa đêm ngày 1 tháng 1 năm 1970, UTC), bạn có thể sử dụng các mức độ chính xác khác nhau:

// Tạo một instance Carbon từ timestamp đã cho với độ chính xác giây
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // Xuất: "202-08-05 13:14:15 +080 CST"

// Đối với độ chính xác cao hơn (milliseconds), sử dụng `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // Xuất: "202-08-05 13:14:15.999 +080 CST"

// Đối với microseconds, sử dụng `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // Xuất: "202-08-05 13:14:15.999999 +080 CST"

// Và đối với nanoseconds, sử dụng `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // Xuất: "202-08-05 13:14:15.999999999 +080 CST"

Tạo các instance từ thành phần ngày và thời gian

Nếu bạn có các thành phần riêng lẻ của một ngày, như năm, tháng và ngày hoặc các thành phần của một thời gian như giờ, phút và giây, Carbon cũng có thể xử lý chúng.

// Tạo một instance Carbon từ ngày đã cho
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // Xuất: "2022-12-25"

// Tạo một instance Carbon từ thời gian đã cho
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // Xuất: "23:59:59"

// Tạo một instance Carbon từ cả ngày và thời gian
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // Xuất: "2022-12-25 23:59:59"

2.3 Phân tích Chuỗi Thời gian

Xử lý biểu diễn ngày và thời gian dưới dạng chuỗi là một tình huống phổ biến. Carbon giúp tiện lợi trong việc phân tích chuỗi thành các instance Carbon.

Sử dụng carbon.Parse cho các định dạng thời gian chuẩn:

// Phân tích một chuỗi với ngày và thời gian
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
    fmt.Printf("Lỗi: %v", c.Error)
} else {
    fmt.Println(c.ToDateTimeString()) // Xuất: "202-08-05 13:14:15"
}

// Phân tích một chuỗi được định dạng theo RFC3339
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // Xuất: "202-08-05 13:14:15 +080 CST"

Định dạng tùy chỉnh với ParseByFormatParseByLayout

Bạn cũng có thể phân tích các chuỗi theo một định dạng cụ thể không được xử lý trực tiếp bởi carbon.Parse.

// Phân tích một chuỗi thời gian thành một instance Carbon theo định dạng
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // Xuất: "202-08-05 13:14:15"

// Phân tích một chuỗi thời gian thành một instance Carbon theo bố cục
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // Xuất: "202-08-05"

Xử lý lỗi

Luôn kiểm tra trường Error để đảm bảo quá trình phân tích thành công:

invalidDate := carbon.Parse("Đây không phải là ngày", carbon.PRC)
if invalidDate.IsInvalid() {
    fmt.Println("Lỗi phân tích ngày:", invalidDate.Error)
}

Hãy nhớ, việc kiểm tra lỗi mạnh mẽ là một phần quan trọng trong việc làm việc với ngày và thời gian để ngăn chặn kết quả không mong đợi hoặc các sự cố hệ thống.