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 , 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

ADVERTENCIA: Cuando los 2 tiempos de comparación son iguales (o corresponden a la misma fecha exacta), las funciones After y Before devolverán false , ya que una fecha no es ni el antes ni el después de sí mismo.

  • date1 == date1 , devuelve true
  • date1 != date1 , devuelve false
  • date1.After(date1) , devuelve false
  • date1.Before(date1) , devuelve false

CONSEJOS: Si necesita saber si una fecha es anterior o igual a otra, solo necesita combinar los 4 operadores

  • date1 == date2 && date1.After(date2) , devuelve true cuando date1 es posterior o igual a date2
    o utilizando ! (date1.Before(date2))
  • date1 == date2 && date1.Before(date2) , devuelve true 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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow