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
true
cuando los 2 son el mismo momento - date1! = date2 // devuelve
true
cuando los 2 son momentos diferentes - date1.Before (date2) // devuelve
true
cuando el primero es estrictamente anterior al segundo - date1.After (date2) // devuelve
true
cuando 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
, devuelvetrue
cuando los 2 son el mismo momento -
date1 != date2
, devuelvetrue
cuando los 2 son momentos diferentes -
date1.Before(date2)
, devuelvetrue
cuando el primero es estrictamente anterior al segundo -
date1.After(date2)
, devuelvetrue
cuando 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
After
yBefore
devolveránfalse
, ya que una fecha no es ni el antes ni el después de sí mismo.
date1 == date1
, devuelvetrue
date1 != date1
, devuelvefalse
date1.After(date1)
, devuelvefalse
date1.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)
, devuelvetrue
cuando date1 es posterior o igual a date2
o utilizando! (date1.Before(date2))
date1 == date2 && date1.Before(date2)
, devuelvetrue
cuando 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