Trilhas
/
Go
Go
/
Exercícios
/
Agendamento no salão de beleza
Agendamento no salão de beleza

Agendamento no salão de beleza

Exercício de aprendizagem

Introdução

Um Time em Go é um tipo que descreve um momento no tempo. As informações de data e hora podem ser acessadas, comparadas e manipuladas por meio dos seus métodos, mas também existem algumas funções chamadas no próprio pacote time. A data e hora atuais podem ser obtidas pela função time.Now.

A função time.Parse faz o parse de strings, transformando-as em valores do tipo Time. Go tem uma forma especial de definir o layout que você espera para o parse. Você precisa escrever um exemplo do layout usando os valores deste timestamp especial: Mon Jan 2 15:04:05 -0700 MST 2006.

Por exemplo:

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

O método Time.Format() retorna uma representação do tempo em string. Assim como na função Parse, o layout de destino é novamente definido por meio de um exemplo que usa os valores do timestamp especial.

Por exemplo:

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

Opções de layout

Para um layout personalizado, use uma combinação dessas opções. Em Go, também estão disponíveis constantes de formato predefinidas para data e timestamp.

Tempo Opções
Ano 2006 ; 06
Mês Jan ; January ; 01 ; 1
Dia 02 ; 2 ; _2 (para zero à esquerda)
Dia da semana Mon ; Monday
Hora 15 ( formato de 24 horas ) ; 3 ; 03 (AM ou PM)
Minuto 04 ; 4
Segundo 05 ; 5
Marcador AM/PM PM
Dia do ano 002 ; __2

O tipo time.Time tem vários métodos para acessar um horário específico. Por exemplo: Hora: Time.Hour(), Mês: Time.Month(). Você encontra mais detalhes sobre como isso funciona na documentação oficial.

O pacote time inclui outro tipo, Duration, que representa o tempo decorrido, além de suporte para localidades/fusos horários, temporizadores e outras funcionalidades relacionadas que serão abordadas em outro conceito.

Instruções

Neste exercício, você vai trabalhar em um agendador de compromissos para um salão de beleza que abriu em 15 de setembro de 2012.

Você tem cinco tarefas, e todas elas envolvem datas de agendamento.

1. Interpretar a data de um agendamento

Implemente a função Schedule para interpretar uma representação textual de uma data de agendamento no formato time.Time correspondente:

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

2. Verificar se um agendamento já passou

Implemente a função HasPassed, que recebe uma data de agendamento e verifica se o agendamento ficou em algum momento no passado:

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

3. Verificar se o agendamento é à tarde

Implemente a função IsAfternoonAppointment, que recebe uma data de agendamento e verifica se o agendamento é à tarde (>= 12:00 e < 18:00):

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

4. Descrever a data e o horário do agendamento

Implemente a função Description, que recebe uma data de agendamento e retorna uma descrição dessa data e desse horário:

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

5. Retornar a data de aniversário da abertura do salão

Implemente a função AnniversaryDate, que retorna a data de aniversário da abertura do salão no ano atual em UTC.

Considerando que o ano atual é 2020:

AnniversaryDate()

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

Observação: o valor de retorno é um time.Time e o horário do dia não importa.

Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Agendamento no salão de beleza?

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.