Help us shape the future of Go! Take the 2026 Go Developer Survey

compact_time

package module
v1.6.0 Latest Latest
Warning

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

Go to latest
Published: Jan 28, 2021 License: MIT Imports: 4 Imported by: 11

README

Compact Time

A go implementation of compact time.

Library Usage

func demonstrateEncode() {
	location, err := time.LoadLocation("Asia/Singapore")
	if err != nil {
		// TODO: Handle error
	}
	goDate := time.Date(2020, time.Month(8), 30, 15, 33, 14, 19577323, location)
	compactDate, err := AsCompactTime(goDate)
	if err != nil {
		// TODO: Handle error
	}
	buffer := make([]byte, EncodedSize(compactDate))
	encodedCount, ok := Encode(compactDate, buffer)
	if !ok {
		// TODO: Not enough room in buffer to encode
	}
	fmt.Printf("Encoded [%v] into %v bytes: %v\n", goDate, encodedCount, buffer)
	// Prints: Encoded [2020-08-30 15:33:14.019577323 +0800 +08] into 21 bytes: [95 207 85 9 156 240 121 68 1 22 83 47 83 105 110 103 97 112 111 114 101]
}

func demonstrateDecode() {
	buffer := []byte{0x28, 0x9a, 0x12, 0x78, 0x08}
	compactDate, decodedCount, err := DecodeTimestamp(buffer)
	if err != nil {
		// TODO: Check if is compact_time.ErrorIncomplete or something else
	}
	goDate, err := compactDate.AsGoTime()
	if err != nil {
		// TODO: Handle error
	}
	fmt.Printf("Decoded %v bytes of %v into [%v]\n", decodedCount, buffer, goDate)
	// Prints: Decoded 5 bytes of [40 154 18 120 8] into [1966-12-01 05:13:05 +0000 UTC]
}

License

MIT License:

Copyright 2019 Karl Stenerud

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Documentation

Overview

Package compact_time provides encoding and decoding mechanisms for the compact time format (https://github.com/kstenerud/compact-time), as well as basic conversion functions to/from the go time package.

Basic validation is performed when decoding data, enough to ensure that it isn't blatantly wrong (such as invalid area/location values, latitude 500, december 54th, etc). However, it does not do more nuanced checks such as on which years February 29th is valid, or when leap seconds are allowed. It also doesn't check for impossible timestamp values such as 2011-03-13/02:10:00/Los_Angeles.

Package compact_time provides encoding and decoding mechanisms for the compact time format (https://github.com/kstenerud/compact-time), as well as basic conversion functions to/from the go time package.

Basic validation is performed when decoding data, enough to ensure that it isn't blatantly wrong (such as invalid area/location values, latitude 500, december 54th, etc). However, it does not do more nuanced checks such as on which years February 29th is valid, or when leap seconds are allowed. It also doesn't check for impossible timestamp values such as 2011-03-13/02:10:00/Los_Angeles.

Package compact_time provides encoding and decoding mechanisms for the compact time format (https://github.com/kstenerud/compact-time), as well as basic conversion functions to/from the go time package.

Basic validation is performed when decoding data, enough to ensure that it isn't blatantly wrong (such as invalid area/location values, latitude 500, december 54th, etc). However, it does not do more nuanced checks such as on which years February 29th is valid, or when leap seconds are allowed. It also doesn't check for impossible timestamp values such as 2011-03-13/02:10:00/Los_Angeles.

Index

Constants

View Source
const (
	TypeDate = TimeType(iota)
	TypeTime
	TypeTimestamp
)
View Source
const (
	TypeZeroValue = TimezoneType(iota)
	TypeZero
	TypeLocal
	TypeAreaLocation
	TypeLatitudeLongitude
)
View Source
const MaxEncodeLength = 50

Maximum byte length that this library will encode

Variables

View Source
var ErrorIncomplete = fmt.Errorf("Compact time value is incomplete")

Functions

func DecodeGoDate added in v1.5.0

func DecodeGoDate(src []byte) (time gotime.Time, bytesDecoded int, err error)

Decode a go date. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func DecodeGoTime added in v1.5.0

func DecodeGoTime(src []byte) (time gotime.Time, bytesDecoded int, err error)

Decode a go time value. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func DecodeGoTimestamp added in v1.5.0

func DecodeGoTimestamp(src []byte) (time gotime.Time, bytesDecoded int, err error)

Decode a go timestamp. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func EncodeGoDate added in v1.5.0

func EncodeGoDate(time gotime.Time, dst []byte) (bytesEncoded int, isComplete bool)

func EncodeGoTime added in v1.5.0

func EncodeGoTime(time gotime.Time, dst []byte) (bytesEncoded int, isComplete bool)

func EncodeGoTimestamp added in v1.5.0

func EncodeGoTimestamp(time gotime.Time, dst []byte) (bytesEncoded int, isComplete bool)

func EncodedSizeGoDate added in v1.5.0

func EncodedSizeGoDate(time gotime.Time) int

func EncodedSizeGoTime added in v1.5.0

func EncodedSizeGoTime(time gotime.Time) int

func EncodedSizeGoTimestamp added in v1.5.0

func EncodedSizeGoTimestamp(time gotime.Time) int

Types

type Time added in v1.0.1

type Time struct {
	ShortAreaLocation   string
	LongAreaLocation    string
	Year                int
	Nanosecond          uint32
	LatitudeHundredths  int16
	LongitudeHundredths int16
	Month               uint8
	Day                 uint8
	Hour                uint8
	Minute              uint8
	Second              uint8
	TimeType            TimeType
	TimezoneType        TimezoneType
}

func AsCompactTime added in v1.0.1

func AsCompactTime(src gotime.Time) (Time, error)

func DecodeDate

func DecodeDate(src []byte) (time Time, bytesDecoded int, err error)

Decode a date. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func DecodeTime

func DecodeTime(src []byte) (time Time, bytesDecoded int, err error)

Decode a time value. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func DecodeTimestamp

func DecodeTimestamp(src []byte) (time Time, bytesDecoded int, err error)

Decode a timestamp. Returns the number of bytes decoded, or the number of bytes it attempted to decode.

func NewDate added in v1.0.1

func NewDate(year, month, day int) (Time, error)

func NewTime added in v1.0.1

func NewTime(hour, minute, second, nanosecond int, areaLocation string) (Time, error)

Create a new time. If areaLocation is empty, UTC is assumed. areaLocation is not validated against any timezone databases.

func NewTimeLatLong added in v1.0.1

func NewTimeLatLong(hour, minute, second, nanosecond, latitudeHundredths, longitudeHundredths int) (Time, error)

func NewTimestamp added in v1.0.1

func NewTimestamp(year, month, day, hour, minute, second, nanosecond int, areaLocation string) (Time, error)

Create a new timestamp. If areaLocation is empty, UTC is assumed. areaLocation is not validated against any timezone databases.

func NewTimestampLatLong added in v1.0.1

func NewTimestampLatLong(year, month, day, hour, minute, second, nanosecond, latitudeHundredths, longitudeHundredths int) (Time, error)

func ZeroDate added in v1.6.0

func ZeroDate() Time

func ZeroTime added in v1.6.0

func ZeroTime() Time

func ZeroTimestamp added in v1.6.0

func ZeroTimestamp() Time

func (*Time) AsGoTime added in v1.0.1

func (this *Time) AsGoTime() (result gotime.Time, err error)

Convert this time into a standard go time. Note: Go time doesn't support latitude/longitude time zones. Attempting to

convert this type of time zone will result in an error.

Note: Converting to go time will validate area/location time zone (if any)

func (*Time) Encode added in v1.5.0

func (this *Time) Encode(dst []byte) (bytesEncoded int, isComplete bool)

Encode a time value (date, time, or timestamp). Returns the number of bytes encoded, or the number of bytes it attempted to encode. Returns isComplete=true if there was enough room in dst. Returns an error if something went wrong other than there not being enough room.

func (*Time) EncodedSize added in v1.5.0

func (this *Time) EncodedSize() int

Get the number of bytes that would be required to encode this time value.

func (*Time) InitDate added in v1.0.1

func (this *Time) InitDate(year, month, day int) error

func (*Time) InitTime added in v1.0.1

func (this *Time) InitTime(hour, minute, second, nanosecond int, areaLocation string) error

Init a time. If areaLocation is empty, UTC is assumed. areaLocation is not validated against any timezone databases.

func (*Time) InitTimeLatLong added in v1.0.1

func (this *Time) InitTimeLatLong(hour, minute, second, nanosecond, latitudeHundredths, longitudeHundredths int) error

func (*Time) InitTimestamp added in v1.0.1

func (this *Time) InitTimestamp(year, month, day, hour, minute, second, nanosecond int, areaLocation string) error

Init a timestamp. If areaLocation is empty, UTC is assumed. areaLocation is not validated against any timezone databases.

func (*Time) InitTimestampLatLong added in v1.0.1

func (this *Time) InitTimestampLatLong(year, month, day, hour, minute, second, nanosecond, latitudeHundredths, longitudeHundredths int) error

func (*Time) IsZeroValue added in v1.6.0

func (this *Time) IsZeroValue() bool

func (*Time) String added in v1.3.0

func (this *Time) String() string

type TimeType added in v1.0.1

type TimeType uint8

type TimezoneType added in v1.0.1

type TimezoneType uint8

Jump to

Keyboard shortcuts

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