timeutils

package
v0.0.0-...-acbe8ed Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2026 License: AGPL-3.0 Imports: 7 Imported by: 0

Documentation

Overview

Package timeutils provides time-related utility functions.

Index

Constants

View Source
const HumanReadableSubMinute = "< 1m"

HumanReadableSubMinute is the human-readable label for durations shorter than one minute.

Variables

View Source
var (
	// ErrInvalidISO8601Format is returned when the ISO 8601 duration format is invalid.
	ErrInvalidISO8601Format = errors.New("invalid ISO 8601 duration format")

	// ErrInvalidDurationNumber is returned when a duration number is invalid.
	ErrInvalidDurationNumber = errors.New("invalid number in duration")

	// ErrUnknownDurationUnit is returned when a duration unit is unknown.
	ErrUnknownDurationUnit = errors.New("unknown duration unit")

	// ErrInvalidScanType is returned when scanning into Duration fails due to type mismatch.
	ErrInvalidScanType = errors.New("invalid type for Duration scan")

	// ErrInvalidDurationFormat is returned when the duration format cannot be parsed.
	ErrInvalidDurationFormat = errors.New("invalid duration format")

	// ErrInvalidPostgresInterval is returned when parsing PostgreSQL interval fails.
	ErrInvalidPostgresInterval = errors.New("invalid PostgreSQL interval")
)

Errors returned by ISO 8601 duration parsing and formatting.

Functions

func FormatHumanReadable

func FormatHumanReadable(dur time.Duration) string

FormatHumanReadable formats a duration in a human-readable short form. Examples: "1m", "5s", "1h", "2d", "< 1m".

func FormatISO8601Duration

func FormatISO8601Duration(duration time.Duration) string

FormatISO8601Duration converts a time.Duration to an ISO 8601 duration string like "PT1M", "PT30S", "PT1H30M". This is needed for cross-database compatibility (PostgreSQL and SQLite). Only supports hours, minutes, and seconds.

func FormatPeriod

func FormatPeriod(period string) string

FormatPeriod formats a period string (e.g., "00:01:00" or "1m") to a human-readable short form. It attempts to parse the input as a Go duration first, then as PostgreSQL interval format. Returns the original string if parsing fails.

func ParseISO8601Duration

func ParseISO8601Duration(duration string) (time.Duration, error)

ParseISO8601Duration parses ISO 8601 duration strings like "PT1M", "PT30S", "PT1H". This is needed for cross-database compatibility (PostgreSQL and SQLite). Only supports hours, minutes, and seconds.

Types

type Duration

type Duration time.Duration

Duration wraps time.Duration for database storage with cross-database compatibility. It stores durations in HH:MM:SS format for both SQLite and PostgreSQL.

func (*Duration) Scan

func (d *Duration) Scan(value any) error

Scan implements the sql.Scanner interface for database retrieval.

func (Duration) Value

func (d Duration) Value() (driver.Value, error)

Value implements the driver.Valuer interface for database storage.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL