Buscar..
Introducción
El paquete Go time proporciona funcionalidad para medir y mostrar el tiempo.
Este paquete proporciona una estructura de tiempo. time.Time , que permite almacenar y realizar cálculos en fechas y horas.
Sintaxis
- hora.Fecha (2016, hora.Diciembre, 31, 23, 59, 59, 999, hora.UTC) // inicializar
- date1 == date2 // devuelve
truecuando los 2 son el mismo momento - date1! = date2 // devuelve
truecuando los 2 son momentos diferentes - date1.Before (date2) // devuelve
truecuando el primero es estrictamente anterior al segundo - date1.After (date2) // devuelve
truecuando el primero es estrictamente después del segundo
Tiempo de retorno. Tiempo cero valor cuando la función tiene un error
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
}
Análisis de tiempo
Si tiene una fecha almacenada como una cadena, deberá analizarla. Use 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
El primer parámetro es el diseño en el que la cadena almacena la fecha y el segundo parámetro es la cadena que contiene la fecha. 01/02/2006 es lo mismo que decir que el formato es MM/DD/YYYY .
El diseño define el formato mostrando cómo se interpretaría el tiempo de referencia, que se definirá como Mon Jan 2 15:04:05 -0700 MST 2006 si fuera el valor; Sirve como un ejemplo del formato de entrada. Entonces se hará la misma interpretación a la cadena de entrada.
Puede ver las constantes definidas en el paquete de tiempo para saber cómo escribir la cadena de diseño, pero tenga en cuenta que las constantes no se exportan y no se pueden usar fuera del paquete de tiempo.
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"
)
Comparando el tiempo
En algún momento deberá saber, con objetos de 2 fechas, si hay correspondientes a la misma fecha, o encontrar qué fecha es posterior a la otra.
En Go , hay 4 maneras de comparar fechas:
-
date1 == date2, devuelvetruecuando los 2 son el mismo momento -
date1 != date2, devuelvetruecuando los 2 son momentos diferentes -
date1.Before(date2), devuelvetruecuando el primero es estrictamente anterior al segundo -
date1.After(date2), devuelvetruecuando el primero es estrictamente después del segundo
ADVERTENCIA: Cuando los 2 tiempos de comparación son iguales (o corresponden a la misma fecha exacta), las funciones
AfteryBeforedevolveránfalse, ya que una fecha no es ni el antes ni el después de sí mismo.
date1 == date1, devuelvetruedate1 != date1, devuelvefalsedate1.After(date1), devuelvefalsedate1.Before(date1), devuelvefalse
CONSEJOS: Si necesita saber si una fecha es anterior o igual a otra, solo necesita combinar los 4 operadores
date1 == date2 && date1.After(date2), devuelvetruecuando date1 es posterior o igual a date2
o utilizando! (date1.Before(date2))date1 == date2 && date1.Before(date2), devuelvetruecuando date1 es anterior o igual a date2 o usando!(date1.After(date2))
Algunos ejemplos para ver cómo usar:
// 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