Aprende a usar el paquete Time de Go
Tags: go, programming
Published: 2022-12-12 18:00:49

Hola developer, en el post de hoy me gustaría hablarte de un paquete que incluye la biblioteca estándar de Go. El nombre de este paquete es Time y es fundamental para trabajar de una manera sencilla y cómodo con fechas y horas. 

Ahora quiero enseñarte algunos de los principales comandos que he usado de este paquete: 

## Función Now
Con la función Now obtenemos la fecha y hora del momento actual en un dato de tipo time. 

```Go
time.Now() 
```
Ahora las funciones Year, Month, Day, Hour, Minute y Second podemos desgranar este dato de time y obtener sus partes. 
```Go
time.Year() // Para obtener el año 
time.Month() // Para obtener el mes 
time.Day() // Para obtener el día 
time.Hour() // Para obtener la hora 
time.Minute() // Para obtener los minutos 
time.Second() // Para obtener los segundos 
```

## Función Date
Otro caso de uso puede ser que estés interesado en obtener un dato de tipo Time de una fecha concreta y personalizada a tus necesidades. Para estos casos se usa la función Date: 
```Go
time.Date(2022, 12, 8, 15, 0, 0, 0, time.UTC) // Output: 2022-12-08 15:00:00 +0000 UTC 
```
Esta función nos retornaría una fecha y hora en tipo Time. Y los parámetros que hay que pasarle son: 

1. Año 
2. Mes 
3. Dia 
4. Hora 
5. Minutos 
6. Segundos 
7. Nanosegundos 
8. Zona horaria (UTC) 

## Función Parse
Otra función bastante importante es la de convertir valor de tipo String en Time para poder trabajar con fechas y horas de una manera sencilla, esto se consigue con la función Parse y funciona del siguiente modo: 
```Go
date := "7/12/2022 20:13:00" 
dateTime, error_= time.Parse("2/1/2006 15:04:05", date) 
```
La función Parse recibe dos parametros: 

1. Layout: es de tipo String y sirve para indicar el formato de fecha y hora que se recibe en el segundo parámetro. En este ejemplo la fecha es d/mm/aaaa hh:mm:ss, por eso el layout es: "2/1/2006 15:04:05" pero si la fecha fuese dd-mm-aaaa, el Layout sería: “02-01-2006”. 

2. Date: es de tipo String y en la fecha que queremos convertir en un dato de tipo Time. 

Me imagino que te estarás preguntando, ¿por qué el Layout es la fecha 1 de enero de 2006 a las 15:04:05? Esto es una constante definida por el equipo de Go y es fijo, el Layout siempre debe ser esa fecha. Si le indicas otra fecha y hora, el parseo no va a funcionar. 

## Funciones Before y After
Ahora te quiero hablar de dos funciones que son muy usadas para validar, sobre todo que no se está trabajando con una fecha en pasado. Estas dos funciones son Before y After y sirven para comparar dos fechas y saber si una es anterior a otra. Veamos un ejemplo: 
```Go
dateTime.Before(time.Now()) 
dateTime.After(time.Now()) 
```
Suponiendo que dateTime es 2022-12-08 15:00:00 +0000 UTC estas dos funciones retornarían: 

* Before = true 
* After = false 

Ya que la fecha sería anterior al momento actual. 

## Funciones Add y AddDate
Por último, otras dos funciones que son muy interesantes son las de Add y AddDate. Estas dos funciones se diferencian en que Add trabaja con las horas, minutos y segundos, mientras que AddDate trabaja con los años, meses y días. Veamos un ejemplo: 
```Go
dateTime.Add(time.Hour + 1) // Output: 2022-12-08 16:00:00.000000001 +0000 UTC 
dateTime.AddDate(0, 0, 1) // Output: 2022-12-09 15:00:00 +0000 UTC 
```
En este caso, suponiendo de nuevo que el valor de dateTime es: 2022-12-08 15:00:00 +0000 UTC vemos que la función Add ha sumado una hora y la función AddDate ha sumado un día. 

Espero que este post te haya servido de ayuda y te haya gustado y si prefieres tener un soporte grafico de esta información aquí tienes un video de YouTube de mi canal hablando sobre esto mismo.

{% embed https://youtu.be/Sv5f14b9c8E %}