Menu
Coddy logo textTech

Criando um Horário Específico

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 59 de 68.

Enquanto time.Now() fornece o momento atual, você frequentemente precisará trabalhar com datas e horas específicas. O Go fornece a função time.Date para criar um objeto time.Time representando qualquer data e hora que você especificar.

A função time.Date recebe sete parâmetros nesta ordem exata: ano, mês, dia, hora, minuto, segundo, nanossegundo e localização. Aqui está a sintaxe básica:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Observe que o Go usa constantes como time.March para meses, o que torna seu código mais legível do que usar números. Você também pode usar números inteiros (1-12) se preferir. O parâmetro de localização normalmente usa time.UTC para o horário UTC ou time.Local para o fuso horário local do seu sistema.

Esta abordagem oferece controle total sobre a criação de qualquer momento específico no tempo, seja um aniversário, um prazo ou uma data histórica. O objeto time.Time resultante funciona exatamente como aquele de time.Now() e pode ser usado com todas as mesmas operações de tempo.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Crie um aplicativo de linha do tempo de eventos históricos que use time.Date para representar datas e horas específicas da história. Este desafio testará sua habilidade de criar objetos time.Time para momentos históricos precisos e exibi-los em um formato organizado.

Você receberá duas entradas:

  • Uma string contendo eventos históricos no formato "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (ex: "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • Uma string contendo opções de exibição separadas por vírgulas no formato "option1,option2,option3" (ex: "chronological,details,summary")

Sua tarefa é:

  1. Analisar a primeira entrada dividindo-a por vírgulas para obter as entradas de eventos individuais
  2. Para cada entrada de evento, dividir por dois-pontos para extrair o nome do evento, ano, mês, dia, hora e minuto
  3. Converter as strings numéricas em inteiros e criar um objeto time.Time usando time.Date para cada evento (use time.UTC para o parâmetro de localização e 0 para segundos e nanossegundos)
  4. Exibir o cabeçalho da aplicação: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Exibir a confirmação de carregamento dos eventos: "Loading historical events..."
  6. Para cada evento, exibir: "Loaded: [event_name] - [complete_time_object]"
  7. Analisar a segunda entrada dividindo-a por vírgulas para obter as opções de exibição
  8. Processar cada opção de exibição:
    • Para "chronological": Exibir "=== CHRONOLOGICAL ORDER ===" seguido pelos eventos ordenados por data (mais antigo primeiro), mostrando "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Para "details": Exibir "=== DETAILED INFORMATION ===" seguido por cada evento mostrando:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • Para "summary": Exibir "=== TIMELINE SUMMARY ===" seguido por:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • Para "years": Exibir "=== EVENTS BY DECADE ===" seguido pelos eventos agrupados por década, mostrando "[decade]s: [comma_separated_event_names]"
  9. Exibir a mensagem de conclusão: "Historical timeline processing completed"

Use o pacote time para criar datas específicas com time.Date, o pacote strings para dividir as strings de entrada, o pacote strconv para converter números em string para inteiros e o pacote fmt para saída formatada. Lembre-se que time.Date recebe parâmetros na ordem exata: ano, mês, dia, hora, minuto, segundo, nanossegundo, localização. Para ordenar cronologicamente, você pode comparar objetos time.Time usando o método Before(). Este desafio demonstra como criar momentos específicos no tempo e trabalhar com dados históricos usando as funcionalidades de tempo do Go.

Folha de consulta

Use time.Date para criar um objeto time.Time para uma data e hora específica:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

A função time.Date recebe sete parâmetros na ordem exata:

  • ano (int)
  • mês (time.Month ou int 1-12)
  • dia (int)
  • hora (int)
  • minuto (int)
  • segundo (int)
  • nanosegundo (int)
  • localização (*time.Location)

Use constantes de mês como time.March para melhor legibilidade, ou inteiros (1-12). Localizações comuns são time.UTC e time.Local.

Experimente você mesmo

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Ler a entrada usando bufio.Scanner para lidar com espaços corretamente
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Analisar eventos da entrada
	eventEntries := strings.Split(eventsInput, ",")
	
	// Analisar opções de exibição da entrada
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Escreva seu código abaixo
	// 1. Analisar cada entrada de evento para extrair nome, ano, mês, dia, hora, minuto
	// 2. Lembre-se de verificar se a fatia (slice) de partes tem elementos suficientes antes de acessar
	// 3. Converter números em string para inteiros usando strconv.Atoi()
	// 4. Criar objetos time.Time usando time.Date() para cada evento
	// 5. Exibir o cabeçalho da aplicação e as mensagens de carregamento
	// 6. Processar cada opção de exibição (chronological, details, summary, years)
	// 7. Exibir a mensagem de conclusão
	
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo