Rutas
/
Go
Go
/
Ejercicios
/
Reservas para el salón de belleza
Reservas para el salón de belleza

Reservas para el salón de belleza

Ejercicio de aprendizaje

Introducción

Un Time en Go es un tipo que describe un momento en el tiempo. La información de fecha y hora se puede consultar, comparar y manipular a través de sus métodos, pero también hay algunas funciones que se llaman sobre el propio paquete time. La fecha y la hora actuales se pueden obtener mediante la función time.Now.

La función time.Parse analiza strings y los convierte en valores de tipo Time. Go tiene una forma especial de definir el formato que esperas para el análisis. Debes escribir un ejemplo del formato usando los valores de esta marca de tiempo especial: Mon Jan 2 15:04:05 -0700 MST 2006.

Por ejemplo:

import "time"

func parseTime() time.Time {
    date := "Tue, 09/22/1995, 13:00"
    layout := "Mon, 01/02/2006, 15:04"

    t, err := time.Parse(layout,date) // time.Time, error
}

// => 1995-09-22 13:00:00 +0000 UTC

El método Time.Format() devuelve una representación de la hora en forma de string. Igual que con la función Parse, el formato de destino se define también mediante un ejemplo que usa los valores de la marca de tiempo especial.

Por ejemplo:

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(1995,time.September,22,13,0,0,0,time.UTC)
    formattedTime := t.Format("Mon, 01/02/2006, 15:04") // string
    fmt.Println(formattedTime)
}

// => Fri, 09/22/1995, 13:00

Opciones de formato

Para un formato personalizado, usa una combinación de estas opciones. En Go también hay disponibles unas constantes de formato de fecha y marca de tiempo predefinidas.

Tiempo Opciones
Año 2006 ; 06
Mes Jan ; January ; 01 ; 1
Día 02 ; 2 ; _2 (para el 0 inicial)
Día de la semana Mon ; Monday
Hora 15 ( formato de 24 horas ) ; 3 ; 03 (AM o PM)
Minuto 04 ; 4
Segundo 05 ; 5
Marca AM/PM PM
Día del año 002 ; __2

El tipo time.Time tiene varios métodos para acceder a una hora concreta. Por ejemplo, la hora: Time.Hour(), el mes: Time.Month(). Puedes encontrar más información sobre cómo funciona esto en la documentación oficial.

El paquete time incluye otro tipo, Duration, que representa el tiempo transcurrido, además de compatibilidad con ubicaciones y zonas horarias, temporizadores y otras funcionalidades relacionadas que se tratarán en otro concepto.

Instrucciones

En este ejercicio vas a trabajar en un planificador de citas para un salón de belleza que abrió el 15 de septiembre de 2012.

Tienes cinco tareas, y todas ellas estarán relacionadas con fechas de citas.

1. Analizar la fecha de la cita

Implementa la función Schedule para analizar una representación textual de la fecha de una cita y convertirla al formato time.Time correspondiente:

Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC

2. Comprobar si una cita ya ha pasado

Implementa la función HasPassed, que recibe la fecha de una cita y comprueba si la cita tuvo lugar en algún momento del pasado:

HasPassed("July 25, 2019 13:45:00")
// => true

3. Comprobar si la cita es por la tarde

Implementa la función IsAfternoonAppointment, que recibe la fecha de una cita y comprueba si la cita es por la tarde (>= 12:00 y < 18:00):

IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true

4. Describir la hora y la fecha de la cita

Implementa la función Description, que recibe la fecha de una cita y devuelve una descripción de esa fecha y hora:

Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."

5. Devolver la fecha del aniversario de la apertura del salón

Implementa la función AnniversaryDate, que devuelve la fecha del aniversario de la apertura del salón para el año actual en UTC.

Suponiendo que el año actual es 2020:

AnniversaryDate()

// => 2020-09-15 00:00:00 +0000 UTC

Nota: el valor devuelto es un time.Time y la hora del día no importa.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Go Exercism

¿Listo para empezar Reservas para el salón de belleza?

Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.