Percursos
/
Go
Go
/
Exercícios
/
Marcações para a beleza
Marcações para a beleza

Marcações para a beleza

Exercício de aprendizagem

Introdução

Um Time em Go é um tipo que descreve um momento no tempo. A informação de data e hora pode ser acedida, comparada e manipulada através dos seus métodos, mas também há algumas funções definidas no próprio pacote time. A data e a hora atuais podem ser obtidas através da função time.Now.

A função time.Parse converte strings em valores do tipo Time. O Go tem uma forma especial de definir o layout que esperas para essa conversão. Tens de 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() devolve uma string que representa o tempo. Tal como acontece com a função Parse, o layout pretendido é novamente definido através 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, usa uma combinação destas opções. Em Go, também estão disponíveis constantes de formato de data e hora predefinidas.

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

O tipo time.Time tem vários métodos para aceder a um determinado valor, por exemplo, a Hora: Time.Hour(), o Mês: Time.Month(). Podes saber mais sobre como isto funciona na documentação oficial.

O pacote time inclui ainda outro tipo, Duration, que representa o tempo decorrido, além de suporte para localizações/fusos horários, temporizadores e outras funcionalidades relacionadas que vamos abordar noutro conceito.

Instruções

Neste exercício vais trabalhar num agendador de marcações para um salão de beleza que abriu a 15 de setembro de 2012.

Tens cinco tarefas, todas elas relacionadas com datas de marcações.

1. Interpreta a data da marcação

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

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

2. Verifica se uma marcação já passou

Implementa a função HasPassed, que recebe a data de uma marcação e verifica se a marcação está algures no passado:

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

3. Verifica se a marcação é à tarde

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

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

4. Descreve a hora e a data da marcação

Implementa a função Description, que recebe a data de uma marcação e devolve uma descrição dessa data e hora:

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

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

Implementa a função AnniversaryDate, que devolve a data de aniversário da abertura do salão para o ano atual em UTC.

Partindo do princípio de que o ano atual é 2020:

AnniversaryDate()

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

Nota: o valor devolvido é um time.Time e a hora do dia não importa.

Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar Marcações para a beleza?

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.