1: Rozpoczęcie pracy z Carbon

1.1 Wprowadzenie

Prosty, semantyczny i przyjazny dla programistów pakiet golang do obsługi daty i czasu

Korzyści z korzystania z Carbon do obsługi daty i czasu:

  • Przyjazny dla programistów: Carbon oferuje płynne i ekspresywne interfejsy do operacji na dacie i czasie, które są intuicyjne dla programistów.
  • Wsparcie dla internacjonalizacji: Obsługuje internacjonalizację, umożliwiając lokalizację reprezentacji daty.
  • Niemożliwość zmiany: Instancje Carbona są niemożliwe do modyfikacji, co oznacza, że mogą być bezpiecznie przekazywane bez nieoczekiwanych modyfikacji.
  • Obsługa strefy czasowej: Carbon upraszcza złożoność zarządzania datami i czasami w różnych strefach czasowych.
  • Obszerna API: Zapewnia kompleksowy zestaw funkcji do tworzenia, parsowania i formatowania dat i czasów.

1.2 Przewodnik instalacji

Instalacja dla wersji Go >= 1.16

Aby zainstalować pakiet Carbon dla wersji Go 1.16 lub nowszej, użyj następującej komendy:

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

Następnie zaimportuj pakiet do swojego pliku Go:

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

Instalacja dla wersji Go < 1.16

Dla starszych wersji Go, możesz wciąż zainstalować Carbon używając:

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

I zaimportuj go tak samo:

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

Należy zauważyć, że wersja v1 nie jest już aktywnie aktualizowana, ale będzie utrzymywana w celu naprawiania błędów.

1.3 Konfigurowanie pierwszego projektu Carbon

Podstawowa konfiguracja Carbona: Po zainstalowaniu Carbona, możesz zacząć go używać, tworząc po prostu nową instancję Carbona. Możesz dostosować Carbon, ustawiając domyślny globalny układ, strefę czasową i lokalizację, aby dostosować je do potrzeb projektu.

Ustawianie domyślnego globalnego układu, strefy czasowej i lokalizacji:

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

Jeśli nie jest to ustawione explicite, Carbon ma domyślne ustawienia dla nich — Layout: "2006-01-02 15:04:05", Strefa czasowa: lokalna, Lokalizacja: "en".

Tworzenie instancji z znaczników czasowych

W Go działanie z znacznikami czasu jest częste, a Carbon dostarcza intuicyjnych metod do ich obsługi. Znacznik czasu to sekwencja znaków lub zakodowana informacja identyfikująca moment wystąpienia określonego zdarzenia, zazwyczaj podając datę i godzinę, czasami dokładną do małej części sekundy.

Aby utworzyć instancję Carbona z znacznika czasu Unix, który reprezentuje liczbę sekund, które upłynęły od epoki Unix (północ 1 stycznia 1970 r. UTC), można użyć różnych poziomów precyzji:

// Utwórz instancję Carbona z podanego znacznika czasu z precyzją do sekundy
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // Wynik: "202-08-05 13:14:15 +080 CST"

// Dla większej precyzji (milisekundy) użyj `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // Wynik: "202-08-05 13:14:15.999 +080 CST"

// Dla mikrosekund użyj `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // Wynik: "202-08-05 13:14:15.999999 +080 CST"

// A dla nanosekund użyj `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // Wynik: "202-08-05 13:14:15.999999999 +080 CST"

Tworzenie instancji z komponentów daty i godziny

Jeśli masz osobne składniki daty, takie jak rok, miesiąc i dzień, lub składniki czasu, takie jak godzina, minuta i sekunda, Carbon również potrafi nimi zarządzać.

// Utwórz instancję Carbona tylko z określoną datą
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // Wynik: "2022-12-25"

// Utwórz instancję Carbona tylko z określonym czasem
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // Wynik: "23:59:59"

// Utwórz instancję Carbona z zarówno datą, jak i czasem
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // Wynik: "2022-12-25 23:59:59"

2.3 Parsowanie ciągów czasu

Obsługa reprezentacji daty i czasu jako ciągów znaków jest powszechnym scenariuszem. Carbon ułatwia analizowanie ciągów na instancje Carbon.

Używanie carbon.Parse dla standardowych formatów czasu:

// Sparsuj ciąg znaków z datą i czasem
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
    fmt.Printf("Błąd: %v", c.Error)
} else {
    fmt.Println(c.ToDateTimeString()) // Wynik: "202-08-05 13:14:15"
}

// Parsowanie ciągu sformatowanego zgodnie z RFC3339
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // Wynik: "202-08-05 13:14:15 +080 CST"

Niestandardowe formaty za pomocą ParseByFormat oraz ParseByLayout

Można również analizować ciągi znaków w określonym formacie, który nie jest bezpośrednio obsługiwany przez carbon.Parse.

// Sparsuj ciąg czasu jako instancję Carbona zgodnie z formatem
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // Wynik: "202-08-05 13:14:15"

// Sparsuj ciąg czasu jako instancję Carbona zgodnie z ukladem
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // Wynik: "202-08-05"

Obsługa błędów

Zawsze sprawdzaj pole Error, aby upewnić się, że analiza zakończyła się sukcesem:

invalidDate := carbon.Parse("To nie jest data", carbon.PRC)
if invalidDate.IsInvalid() {
    fmt.Println("Błąd podczas analizy daty:", invalidDate.Error)
}

Pamiętaj, że solidna kontrola błędów to kluczowy element pracy z datami i godzinami, aby zapobiec nieoczekiwanym wynikom lub awariom systemu.