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 ¶
- Variables
- type MoscowTime
- func (t MoscowTime) MarshalJSON() ([]byte, error)
- func (t MoscowTime) MarshalXML(d *xml.Encoder, start xml.StartElement) error
- func (t MoscowTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error)
- func (t *MoscowTime) Scan(src interface{}) error
- func (t *MoscowTime) UnmarshalJSON(data []byte) error
- func (t *MoscowTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
- func (t *MoscowTime) UnmarshalXMLAttr(attr xml.Attr) error
- type Time
- func (t Time) Add(duration time.Duration) Time
- func (t Time) CustomMarshalJSON(location *time.Location, format string) ([]byte, error)
- func (t Time) CustomMarshalXML(d *xml.Encoder, start xml.StartElement, location *time.Location, format string) error
- func (t Time) CustomMarshalXMLAttr(name xml.Name, location *time.Location, format string) (xml.Attr, error)
- func (t *Time) CustomScan(src interface{}, location *time.Location) error
- func (t *Time) CustomUnmarshalJSON(data []byte, location *time.Location) error
- func (t *Time) CustomUnmarshalXML(d *xml.Decoder, start xml.StartElement, location *time.Location) error
- func (t *Time) CustomUnmarshalXMLAttr(attr xml.Attr, location *time.Location) error
- func (t Time) DeepEqual(y Time) bool
- func (t Time) Equal(y Time) bool
- func (t Time) EqualTime(y time.Time) bool
- func (t Time) Format(layout ...string) string
- func (t Time) MarshalJSON() ([]byte, error)
- func (t Time) MarshalXML(d *xml.Encoder, start xml.StartElement) error
- func (t Time) MarshalXMLAttr(name xml.Name) (xml.Attr, error)
- func (t *Time) Scan(src interface{}) error
- func (t Time) String() string
- func (t Time) Time() time.Time
- func (t *Time) UnmarshalJSON(data []byte) error
- func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
- func (t *Time) UnmarshalXMLAttr(attr xml.Attr) error
- func (t Time) UntilEndMonthDays() int
- func (t Time) UntilEndNextMonthDays() int
- func (t Time) Value() (driver.Value, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
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 ¶
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 ¶
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 ¶
NewCurrentTime возвращает текущее время в UTC
func NewTime ¶
NewTime возвращает модифицированную метку времени на основе стандартной метки времени в UTC
func NewTimeString ¶
NewTimeString возвращает время на основе строки в location Europe/Moscow
func (Time) CustomMarshalJSON ¶
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 ¶
CustomScan это реализация интерфейса database/sql.Scanner
func (*Time) CustomUnmarshalJSON ¶
CustomUnmarshalJSON необходим для декодирования даты и времени
func (*Time) CustomUnmarshalXML ¶
func (t *Time) CustomUnmarshalXML( d *xml.Decoder, start xml.StartElement, location *time.Location, ) error
CustomUnmarshalXML необходим для декодирования даты и времени
func (*Time) CustomUnmarshalXMLAttr ¶
CustomUnmarshalXMLAttr необходим для декодирования даты и времени
func (Time) Format ¶
Format возвращает отформатированную дату и время Функция принимает первый layout В случае если layout не задан - используется формат по умолчанию Формат по умолчанию: "2006-01-02 15:04:05 MST"
func (Time) MarshalJSON ¶
MarshalJSON необходим для кодирования даты и времени
func (Time) MarshalXML ¶
MarshalXML необходим для кодирования даты и времени
func (Time) MarshalXMLAttr ¶
MarshalXMLAttr необходим для кодирования даты и времени
func (*Time) UnmarshalJSON ¶
UnmarshalJSON необходим для декодирования даты и времени
func (*Time) UnmarshalXML ¶
UnmarshalXML необходим для декодирования даты и времени
func (*Time) UnmarshalXMLAttr ¶
UnmarshalXMLAttr необходим для декодирования даты и времени
func (Time) UntilEndMonthDays ¶
UntilEndMonthDays возвращает количество дней от текущей даты до конца текущего месяца
func (Time) UntilEndNextMonthDays ¶
UntilEndNextMonthDays возвращает количество дней от текущей даты до конца следующего месяца