1.1 Введение

Простой, семантический и удобный для разработчиков пакет для работы с датами и временем на golang.

Преимущества использования 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 есть настройки по умолчанию для этих параметров — Макет: "2006-01-02 15:04:05", Часовой пояс: Местное время, Локаль: "en".

2: Основные операции Carbon

2.1 Работа с текущим временем

Получение текущей даты и времени

Получение текущей даты и времени является фундаментальной операцией во многих приложениях. С Carbon вы можете получить текущий экземпляр даты и времени, вызвав метод carbon.Now(). Давайте посмотрим, как получить текущую дату и время:

// Получает текущую дату и время в виде экземпляра Carbon.
now := carbon.Now()

fmt.Println("Текущая дата и время:", now)

Отображение сегодня, вчера и завтра

Carbon предоставляет элегантный способ работы с датами относительно текущего дня. Для получения представления даты сегодня, вчера и завтра вы можете использовать методы carbon.Now(), carbon.Yesterday() и carbon.Tomorrow() соответственно:

// Дата сегодня
today := carbon.Now()
fmt.Println("Сегодня:", today.ToDateTimeString())

// Дата вчера
yesterday := carbon.Yesterday()
fmt.Println("Вчера:", yesterday.ToDateTimeString())

// Дата завтра
tomorrow := carbon.Tomorrow()
fmt.Println("Завтра:", tomorrow.ToDateTimeString())

Эти методы предоставляют лаконичный способ взаимодействия с этими часто используемыми ссылками на даты без ручных вычислений.

Форматирование и отображение текущего времени

Carbon облегчает различные способы форматирования и отображения даты и времени. Независимо от того, нужен ли вам стандартный формат, такой как ISO8601, пользовательский формат или локализованная версия, у Carbon есть методы, соответствующие этим требованиям.

Вот как вы можете отформатировать текущее время различными способами:

// Стандартное представление даты и времени
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())

// Пользовательский формат даты и времени
fmt.Println("Пользовательский:", now.Format("Monday, 02-Jan-06 15:04:05 MST"))

// Использование предопределенных макетов
fmt.Println("Формат ANSIC:", now.ToAnsicString())
fmt.Println("Формат UnixDate:", now.ToUnixDateString())
fmt.Println("Формат RubyDate:", now.ToRubyDateString())
fmt.Println("Формат Kitchen:", now.ToKitchenString())

// Для пользовательских шаблонов используйте метод Format
fmt.Println("Пользовательский шаблон:", now.Format("2006-01-02 15:04:05 PM"))

2.2 Создание экземпляров Carbon

Создание экземпляров из меток времени

В языке Go работа с метками времени является частой, и Carbon предоставляет интуитивно понятные методы для их обработки. Метка времени - это последовательность символов или закодированная информация, идентифицирующая время наступления определенного события, обычно указывающая дату и время суток, порой с точностью до малой доли секунды.

Для создания экземпляра Carbon из метки времени Unix, которая представляет собой количество секунд, прошедших с начала Эпохи Unix (полночь 1 января 1970 года, по UTC), можно использовать различные уровни точности:

// Создание экземпляра Carbon из заданной метки времени с точностью до секунд
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"

Создание экземпляров из компонентов даты и времени

Если у вас есть отдельные компоненты даты, такие как год, месяц и день, или компоненты времени, такие как час, минута и секунда, Carbon также может справиться с этими задачами.

// Создание экземпляра 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 упрощает разбор строк в экземпляры Carbon.

Использование 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)
}

Помните, что надежная проверка ошибок - критическая часть работы с датами и временем, чтобы избежать неожиданных результатов или сбоев системы.