Поиск…
Вступление
Пакет time
Go обеспечивает функциональность для измерения и отображения времени.
Этот пакет обеспечивает время структуры. time.Time
, позволяющее хранить и выполнять вычисления по датам и времени.
Синтаксис
- time.Date (2016, time.December, 31, 23, 59, 59, 999, time.UTC) // инициализировать
- date1 == date2 // возвращает
true
когда 2 являются одним и тем же моментом - date1! = date2 // возвращает
true
когда 2 - другой момент - date1.Before (date2) // возвращает
true
когда первое строго перед вторым - date1.After (date2) // возвращает
true
когда первое строго после второго
Возвращаемое время. Время нулевого значения, когда функция имеет ошибку.
const timeFormat = "15 Monday January 2006" func ParseDate(s string) (time.Time, error) { t, err := time.Parse(timeFormat, s) if err != nil { // time.Time{} returns January 1, year 1, 00:00:00.000000000 UTC // which according to the source code is the zero value for time.Time // https://golang.org/src/time/time.go#L23 return time.Time{}, err } return t, nil }
Анализ времени
Если у вас есть дата, сохраненная в виде строки, вам необходимо ее проанализировать. Использовать time.Parse
.
// time.Parse( format , date to parse)
date, err := time.Parse("01/02/2006", "04/08/2017")
if err != nil {
panic(err)
}
fmt.Println(date)
// Prints 2017-04-08 00:00:00 +0000 UTC
Первым параметром является макет, в котором строка хранит дату, а второй параметр - это строка, содержащая дату. 01/02/2006
- это то же самое, что говорить о формате MM/DD/YYYY
.
Макет определяет формат, показывая, как время ссылки, определенное как Mon Jan 2 15:04:05 -0700 MST 2006
, будет интерпретировано, если бы оно было значением; он служит примером входного формата. Затем будет введена такая же интерпретация входной строки.
Вы можете увидеть константы, определенные в пакете времени, чтобы знать, как написать строку макета, но обратите внимание, что константы не экспортируются и не могут использоваться вне временного пакета.
const (
stdLongMonth // "January"
stdMonth // "Jan"
stdNumMonth // "1"
stdZeroMonth // "01"
stdLongWeekDay // "Monday"
stdWeekDay // "Mon"
stdDay // "2"
stdUnderDay // "_2"
stdZeroDay // "02"
stdHour // "15"
stdHour12 // "3"
stdZeroHour12 // "03"
stdMinute // "4"
stdZeroMinute // "04"
stdSecond // "5"
stdZeroSecond // "05"
stdLongYear // "2006"
stdYear // "06"
stdPM // "PM"
stdpm // "pm"
stdTZ // "MST"
stdISO8601TZ // "Z0700" // prints Z for UTC
stdISO8601SecondsTZ // "Z070000"
stdISO8601ShortTZ // "Z07"
stdISO8601ColonTZ // "Z07:00" // prints Z for UTC
stdISO8601ColonSecondsTZ // "Z07:00:00"
stdNumTZ // "-0700" // always numeric
stdNumSecondsTz // "-070000"
stdNumShortTZ // "-07" // always numeric
stdNumColonTZ // "-07:00" // always numeric
stdNumColonSecondsTZ // "-07:00:00"
)
Сравнение времени
Когда-нибудь вам нужно будет знать, с двумя объектами дат, если они соответствуют одной и той же дате, или найти, какая дата после другой.
В Go есть 4 способа сравнения дат:
-
date1 == date2
, возвращаетtrue
когда 2 являются одним и тем же моментом -
date1 != date2
, возвращаетtrue
когда 2 - другой момент -
date1.Before(date2)
, возвращаетtrue
когда первое строго перед вторым -
date1.After(date2)
возвращаетtrue
когда первое строго после второго
ПРЕДУПРЕЖДЕНИЕ: Когда 2 раза для сравнения одинаковы (или соответствуют той же дате), функции
After
иBefore
вернутfalse
, поскольку дата не указана ни до, ни после себя
date1 == date1
, возвращаетtrue
date1 != date1
, возвращаетfalse
date1.After(date1)
, возвращаетfalse
date1.Before(date1)
, возвращаетfalse
СОВЕТЫ. Если вам нужно знать, была ли дата раньше или равна другой, просто нужно объединить 4 оператора
date1 == date2 && date1.After(date2)
, возвращаетtrue
когда date1 после или равна date2
или используя! (date1.Before(date2))
date1 == date2 && date1.Before(date2)
, возвращаетtrue
когда date1 до или равна date2 или использует!(date1.After(date2))
Некоторые примеры того, как использовать:
// Init 2 dates for example
var date1 = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
var date2 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)
var date3 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)
bool1 := date1.Before(date2) // true, because date1 is before date2
bool2 := date1.After(date2) // false, because date1 is not after date2
bool3 := date2.Before(date1) // false, because date2 is not before date1
bool4 := date2.After(date1) // true, because date2 is after date1
bool5 := date1 == date2 // false, not the same moment
bool6 := date1 == date3 // true, different objects but representing the exact same time
bool7 := date1 != date2 // true, different moments
bool8 := date1 != date3 // false, not different moments
bool9 := date1.After(date3) // false, because date1 is not after date3 (that are the same)
bool10:= date1.Before(date3) // false, because date1 is not before date3 (that are the same)
bool11 := !(date1.Before(date3)) // true, because date1 is not before date3
bool12 := !(date1.After(date3)) // true, because date1 is not after date3