times

package module
v0.0.0-...-7c354a3 Latest Latest
Warning

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

Go to latest
Published: Aug 23, 2019 License: MIT Imports: 8 Imported by: 0

README

Times

Build Status GoDoc Go Report Card Software License

This don't stable version

Description

Пакет для кастомизации меток времени.

Поддержка кастомизаций:
  • encoding/xml.Unmarshaler

  • encoding/xml.UnmarshalerAttr

  • encoding/xml.Marshaler

  • encoding/xml.MarshalerAttr

  • encoding/json.Unmarshaler

  • encoding/json.Marshaler

  • database/sql.Scanner

Installation

$ go get -u github.com/mantyr/times

Author

Oleg Shevelev

Documentation

Overview

Example (CustomTime)
package main

import (
	"encoding/xml"
	"fmt"
	"time"

	"github.com/mantyr/times"
)

var MoscowLocation *time.Location

func init() {
	var err error
	MoscowLocation, err = time.LoadLocation("Europe/Moscow")
	if err != nil {
		panic(err)
	}
}

// CustomTime это метка времени в Europe/Moscow
// Особенности:
//
//	Принимает любую локаль и преобразует в Europe/Moscow
//	В XML возвращает xml.UTC
type CustomTime struct {
	times.Time
}

func NewCustomTime(s string) (*CustomTime, error) {
	t, err := times.NewTimeString(s, MoscowLocation)
	if err != nil {
		return nil, err
	}
	return &CustomTime{
		Time: *t,
	}, nil
}

// MarshalXML необходим для кодирования даты и времени в UTC
// Формат: YYYY-MM-DDThh:mm:ss.sssZ
func (t CustomTime) MarshalXML(d *xml.Encoder, start xml.StartElement) error {
	return t.CustomMarshalXML(d, start, time.UTC, "2006-01-02T15:04:05Z07:00")
}

// MarshalXML необходим для кодирования даты и времени в UTC
// Формат: YYYY-MM-DDThh:mm:ss.sssZ
func (t CustomTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	return t.CustomMarshalXMLAttr(name, time.UTC, "2006-01-02T15:04:05Z07:00")
}

// UnmarshalXML необходим для декодирования даты и времени
// Входной формат:
//
//	YYYY-MM-DDThh:mm:ss.sssZ         - UTC
//	YYYY-MM-DDThh:mm:ss.sss+/-hh:mm  - локальное время UTC со смещением
//	YYYY-MM-DDThh:mm:ss.sss          - локальное время с часовым поясом Europe/Moscow по умолчанию
func (t *CustomTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	return t.CustomUnmarshalXML(d, start, times.MoscowLocation)
}

// UnmarshalXMLAttr необходим для декодирования даты и времени
func (t *CustomTime) UnmarshalXMLAttr(attr xml.Attr) error {
	return t.CustomUnmarshalXMLAttr(attr, times.MoscowLocation)
}

// Scan это реализация интерфейса database/sql.Scanner
func (t *CustomTime) Scan(src interface{}) error {
	return t.CustomScan(src, times.MoscowLocation)
}

func main() {
	type Data struct {
		XMLName  xml.Name   `xml:"a"`
		DateAttr CustomTime `xml:"date,attr"`
		Date     CustomTime `xml:"date"`
	}
	d := &Data{}
	err := xml.Unmarshal([]byte(`<a date="2018-01-25T16:24:28Z"><date>2018-01-25T16:24:28+05:00</date></a>`), d)
	fmt.Println(err)
	fmt.Println(d.DateAttr)
	fmt.Println(d.DateAttr.Time.Time())
	fmt.Println(d.Date)
	fmt.Println(d.Date.Time.Time())

	data, err := xml.Marshal(d)
	fmt.Println(err)
	fmt.Println(string(data))
}
Output:

<nil>
2018-01-25T19:24:28+03:00
2018-01-25 19:24:28 +0300 MSK
2018-01-25T14:24:28+03:00
2018-01-25 14:24:28 +0300 MSK
<nil>
<a date="2018-01-25T16:24:28Z"><date>2018-01-25T11:24:28Z</date></a>

Index

Examples

Constants

This section is empty.

Variables

View Source
var MoscowLocation *time.Location

Functions

This section is empty.

Types

type MoscowTime

type MoscowTime struct {
	Time
}

MoscowTime это метка времени в Europe/Moscow Особенности:

Принимает любую локаль и преобразует в Europe/Moscow
В XML возвращает UTC

func NewMoscowTime

func NewMoscowTime(t time.Time) (*MoscowTime, error)

func NewMoscowTimeString

func NewMoscowTimeString(s string) (*MoscowTime, error)

func (MoscowTime) MarshalJSON

func (t MoscowTime) MarshalJSON() ([]byte, error)

MarshalJSON необходим для кодирования даты и времени

func (MoscowTime) MarshalXML

func (t MoscowTime) MarshalXML(d *xml.Encoder, start xml.StartElement) error

MarshalXML необходим для кодирования даты и времени в UTC Формат: YYYY-MM-DDThh:mm:ss.sssZ

func (MoscowTime) MarshalXMLAttr

func (t MoscowTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error)

MarshalXML необходим для кодирования даты и времени в UTC Формат: YYYY-MM-DDThh:mm:ss.sssZ

func (*MoscowTime) Scan

func (t *MoscowTime) Scan(src interface{}) error

Scan это реализация интерфейса database/sql.Scanner

func (*MoscowTime) UnmarshalJSON

func (t *MoscowTime) UnmarshalJSON(data []byte) error

UnmarshalJSON необходим для декодирования даты и времени

func (*MoscowTime) UnmarshalXML

func (t *MoscowTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

UnmarshalXML необходим для декодирования даты и времени Входной формат:

YYYY-MM-DDThh:mm:ss.sssZ         - UTC
YYYY-MM-DDThh:mm:ss.sss+/-hh:mm  - локальное время UTC со смещением
YYYY-MM-DDThh:mm:ss.sss          - локальное время с часовым поясом Europe/Moscow по умолчанию

func (*MoscowTime) UnmarshalXMLAttr

func (t *MoscowTime) UnmarshalXMLAttr(attr xml.Attr) error

UnmarshalXMLAttr необходим для декодирования даты и времени

type Time

type Time time.Time

Time это метка времени

Используется стандарт ISO 8601 (YYYY-MM-DDThh:mm:ss)

YYYY-MM-DDThh:mm:ss.sssZ        - UTC
YYYY-MM-DDThh:mm:ss.sss+/-hh:mm - локальное UTC время со смещением
YYYY-MM-DDThh:mm:ss.sss         - локальное время в часовом поясе по умолчанию

Пример:

«2005-08-09T18:31:42» - «9 августа 2005 года 18 часов 31 минута 42 секунды»

Часовой пояс по умолчанию:

Без указания часового пояса время передается в часовом поясе UTC.
Для кастомизации часового пояса по умолчанию см. пример в example_custom_time_test.go

Возможно указание конкретного часового пояса (YYYY-MM-DDThh:mm:ss±hh:mm) Пример:

2012-06-01T12:00:00-03:00

По факту может прийти время с долями секунды, например:

2018-01-25T16:24:28.74

Поддерживает следующие форматы при Unmarshalling (XML/JSON):

2006-01-02T15:04:05Z07:00
пример: 2018-02-01T14:12:18+03:00

2006-01-02T15:04:05.999999999Z07:00 - обрезание до секунды
пример: 2018-02-01T14:12:18.47+03:00

2006-01-02T15:04:05
пример: 2018-02-01T14:12:18

2006-01-02T15:04:05.999999999Z - обрезание до секунды
пример: 2018-02-01T14:12:18.47

func NewCurrentTime

func NewCurrentTime() (*Time, error)

NewCurrentTime возвращает текущее время в UTC

func NewTime

func NewTime(t time.Time, location *time.Location) (*Time, error)

NewTime возвращает модифицированную метку времени на основе стандартной метки времени в UTC

func NewTimeString

func NewTimeString(date string, location *time.Location) (*Time, error)

NewTimeString возвращает время на основе строки в location Europe/Moscow

func (Time) Add

func (t Time) Add(duration time.Duration) Time

Add возвращает t+duration

func (Time) CustomMarshalJSON

func (t Time) CustomMarshalJSON(
	location *time.Location,
	format string,
) (
	[]byte,
	error,
)

MarshalJSON необходим для кодирования даты и времени

func (Time) CustomMarshalXML

func (t Time) CustomMarshalXML(
	d *xml.Encoder,
	start xml.StartElement,
	location *time.Location,
	format string,
) error

CustomMarshalXML необходим для кодирования даты и времени

func (Time) CustomMarshalXMLAttr

func (t Time) CustomMarshalXMLAttr(
	name xml.Name,
	location *time.Location,
	format string,
) (
	xml.Attr,
	error,
)

CustomMarshalXMLAttr необходим для кодирования даты и времени

func (*Time) CustomScan

func (t *Time) CustomScan(src interface{}, location *time.Location) error

CustomScan это реализация интерфейса database/sql.Scanner

func (*Time) CustomUnmarshalJSON

func (t *Time) CustomUnmarshalJSON(data []byte, location *time.Location) error

CustomUnmarshalJSON необходим для декодирования даты и времени

func (*Time) CustomUnmarshalXML

func (t *Time) CustomUnmarshalXML(
	d *xml.Decoder,
	start xml.StartElement,
	location *time.Location,
) error

CustomUnmarshalXML необходим для декодирования даты и времени

func (*Time) CustomUnmarshalXMLAttr

func (t *Time) CustomUnmarshalXMLAttr(attr xml.Attr, location *time.Location) error

CustomUnmarshalXMLAttr необходим для декодирования даты и времени

func (Time) DeepEqual

func (t Time) DeepEqual(y Time) bool

DeepEqual сравнивает две даты в не зависимости от time.Location

func (Time) Equal

func (t Time) Equal(y Time) bool

Equal сравнивает две даты

func (Time) EqualTime

func (t Time) EqualTime(y time.Time) bool

EqualTime сравнивает две даты, одна из которых time.Time

func (Time) Format

func (t Time) Format(layout ...string) string

Format возвращает отформатированную дату и время Функция принимает первый layout В случае если layout не задан - используется формат по умолчанию Формат по умолчанию: "2006-01-02 15:04:05 MST"

func (Time) MarshalJSON

func (t Time) MarshalJSON() ([]byte, error)

MarshalJSON необходим для кодирования даты и времени

func (Time) MarshalXML

func (t Time) MarshalXML(d *xml.Encoder, start xml.StartElement) error

MarshalXML необходим для кодирования даты и времени

func (Time) MarshalXMLAttr

func (t Time) MarshalXMLAttr(name xml.Name) (xml.Attr, error)

MarshalXMLAttr необходим для кодирования даты и времени

func (*Time) Scan

func (t *Time) Scan(src interface{}) error

Scan это реализация интерфейса database/sql.Scanner

func (Time) String

func (t Time) String() string

String возвращает текстовое представление

func (Time) Time

func (t Time) Time() time.Time

Time возвращает исходный объект времени

func (*Time) UnmarshalJSON

func (t *Time) UnmarshalJSON(data []byte) error

UnmarshalJSON необходим для декодирования даты и времени

func (*Time) UnmarshalXML

func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

UnmarshalXML необходим для декодирования даты и времени

func (*Time) UnmarshalXMLAttr

func (t *Time) UnmarshalXMLAttr(attr xml.Attr) error

UnmarshalXMLAttr необходим для декодирования даты и времени

func (Time) UntilEndMonthDays

func (t Time) UntilEndMonthDays() int

UntilEndMonthDays возвращает количество дней от текущей даты до конца текущего месяца

func (Time) UntilEndNextMonthDays

func (t Time) UntilEndNextMonthDays() int

UntilEndNextMonthDays возвращает количество дней от текущей даты до конца следующего месяца

func (Time) Value

func (t Time) Value() (driver.Value, error)

Value это реализация database/sql/driver.Valuer

Jump to

Keyboard shortcuts

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