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
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.
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.
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
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
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
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."
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.
Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.