Преобразование ISO 8601 в миллисекунды в Golang: подробное руководство

В этой статье мы рассмотрим различные методы преобразования временных меток ISO 8601 в миллисекунды на языке программирования Go (Golang). ISO 8601 — широко используемый стандарт для представления даты и времени в удобочитаемом и машиночитаемом формате. Преобразование меток времени ISO 8601 в миллисекунды может быть полезно во многих приложениях, например при расчете разницы во времени или более детальной работе с метками времени.

Метод 1: использование функции time.Parse

Пакет timeв Golang предоставляет функцию Parse, которая может анализировать строку в определенном макете и получать значение time.Time. Мы можем использовать эту функцию для анализа временной метки ISO 8601 и последующего преобразования ее в миллисекунды.

package main
import (
    "fmt"
    "time"
)
func main() {
    timestamp := "2024-03-03T12:34:56.789Z"
    layout := "2006-01-02T15:04:05.999Z07:00"
    parsedTime, err := time.Parse(layout, timestamp)
    if err != nil {
        fmt.Println("Error parsing timestamp:", err)
        return
    }
    milliseconds := parsedTime.UnixNano() / int64(time.Millisecond)
    fmt.Println("Milliseconds:", milliseconds)
}

Метод 2: использование функции time.ParseDuration

Другой подход — использовать функцию ParseDurationиз пакета timeдля анализа строки продолжительности. Мы можем преобразовать временную метку ISO 8601 в продолжительность, а затем извлечь общее количество миллисекунд.

package main
import (
    "fmt"
    "time"
)
func main() {
    timestamp := "2024-03-03T12:34:56.789Z"
    duration, err := time.ParseDuration(timestamp)
    if err != nil {
        fmt.Println("Error parsing timestamp:", err)
        return
    }
    milliseconds := duration.Milliseconds()
    fmt.Println("Milliseconds:", milliseconds)
}

Метод 3. Использование собственной логики анализа

вы можете реализовать собственную логику синтаксического анализа, используя функции манипулирования строками и преобразования.

package main
import (
    "fmt"
    "strconv"
    "strings"
)
func main() {
    timestamp := "2024-03-03T12:34:56.789Z"
    // Extract year, month, day, hour, minute, second, and millisecond components
    parts := strings.Split(timestamp, "-")
    year, _ := strconv.Atoi(parts[0])
    month, _ := strconv.Atoi(parts[1])
    dayTime := strings.Split(parts[2], "T")
    day, _ := strconv.Atoi(dayTime[0])
    timeParts := strings.Split(dayTime[1], ":")
    hour, _ := strconv.Atoi(timeParts[0])
    minute, _ := strconv.Atoi(timeParts[1])
    second := strings.Split(timeParts[2], ".")[0]
    millisecond, _ := strconv.Atoi(strings.Split(timeParts[2], ".")[1])
    // Convert to milliseconds
    milliseconds := (((((year*12+month)*30+day)*24+hour)*60+minute)*60+second)*1000 + millisecond
    fmt.Println("Milliseconds:", milliseconds)
}

В этой статье мы рассмотрели несколько методов преобразования временных меток ISO 8601 в миллисекунды в Golang. Мы рассмотрели использование функции time.Parse, функции time.ParseDurationи реализацию пользовательской логики синтаксического анализа. Эти методы обеспечивают гибкость в зависимости от конкретных требований и формата ваших временных меток ISO 8601. Преобразуя временные метки в миллисекунды, вы можете более точно выполнять различные вычисления и операции со значениями времени.