Menu
CoddyTech

Formatando o Tempo

Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 60 de 68.

Depois de obter um objeto time.Time, muitas vezes você precisará convertê-lo em uma string em um formato legível. Go usa uma abordagem única para formatar horários, diferente da usada em outras linguagens de programação.

Em vez de usar códigos de formatação como %Y-%m-%d, Go usa uma data de referência como modelo. Essa data de referência é Mon Jan 2 15:04:05 MST 2006, que representa o momento exato: 2 de janeiro de 2006, às 15:04:05, no horário padrão das Montanhas.

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Saída: 2023-10-26

A ideia principal é organizar os componentes da data de referência no padrão que você quer. Para o formato YYYY-MM-DD, você usa "2006-01-02", porque é assim que a data de referência aparece nesse padrão. Para um formato diferente, como Jan 2, 2006, você usaria "Jan 2, 2006".

Essa abordagem baseada em layout torna a formatação de hora do Go fácil de memorizar e flexível. Depois que você memoriza a data de referência, pode criar qualquer formato simplesmente organizando seus componentes no padrão desejado.

challenge icon

Desafio

Fácil

Crie um sistema de exibição de data e hora em vários formatos que formate objetos time.Time usando o sistema exclusivo de layouts com data de referência do Go. Este desafio testará sua capacidade de usar o método Format com diferentes padrões de layout para criar várias representações de data e hora.

Você receberá duas entradas:

  • Uma string contendo informações de data no formato "year:month:day:hour:minute" (por exemplo, "2023:12:25:14:30")
  • Uma string contendo solicitações de formato separadas por vírgulas no formato "format1,format2,format3" (por exemplo, "iso,american,european,time12,time24")

Sua tarefa é:

  1. Analisar a primeira entrada separando-a pelos dois-pontos para extrair os valores de ano, mês, dia, hora e minuto
  2. Converter esses valores de string para inteiros usando o pacote strconv
  3. Criar um objeto time.Time usando time.Date com os valores analisados (use time.UTC como localização, 0 para segundos e nanossegundos)
  4. Exibir o cabeçalho do aplicativo: "=== DATE/TIME FORMATTER ==="
  5. Exibir o horário de origem: "Source time: [complete_time_object]"
  6. Analisar a segunda entrada separando-a pelas vírgulas para obter as solicitações de formato
  7. Exibir o cabeçalho de formatação: "Formatted outputs:"
  8. Para cada solicitação de formato, use a string de layout apropriada com o método Format:
    • Para "iso": use o layout "2006-01-02" e exiba "ISO format: [formatted_result]"
    • Para "american": use o layout "01/02/2006" e exiba "American format: [formatted_result]"
    • Para "european": use o layout "02/01/2006" e exiba "European format: [formatted_result]"
    • Para "long": use o layout "January 2, 2006" e exiba "Long format: [formatted_result]"
    • Para "time12": use o layout "3:04 PM" e exiba "12-hour time: [formatted_result]"
    • Para "time24": use o layout "15:04" e exiba "24-hour time: [formatted_result]"
    • Para "full": use o layout "Monday, January 2, 2006 at 3:04 PM" e exiba "Full format: [formatted_result]"
    • Para "compact": use o layout "20060102" e exiba "Compact format: [formatted_result]"
  9. Calcular e exibir estatísticas:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Exibir informações de referência:
    • "=== REFERENCE DATE INFO ==="
    • "Go uses reference date: Mon Jan 2 15:04:05 MST 2006"
    • "This represents: January 2nd, 2006 at 3:04:05 PM"
    • "Layout patterns arrange these components as needed"
  11. Exibir a mensagem de conclusão: "Date formatting completed using Go's layout system"

Use o pacote time para operações com horários, o pacote strings para dividir strings de entrada, o pacote strconv para converter strings em inteiros e o pacote fmt para saída formatada. Lembre-se de que a formatação de horários do Go usa a data de referência Mon Jan 2 15:04:05 MST 2006 como modelo, e você organiza esses componentes no padrão desejado. Este desafio demonstra como funciona o sistema exclusivo de formatação baseado em layouts do Go, fazendo com que você aplique vários padrões de formato diferentes ao mesmo objeto de horário.

Experimente você mesmo

package main

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

func main() {
	// Leia a entrada
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Separe os componentes da data pelos dois-pontos
	dateComponents := strings.Split(dateInput, ":")
	
	// Converta os componentes de string em números inteiros
	year, _ := strconv.Atoi(dateComponents[0])
	month, _ := strconv.Atoi(dateComponents[1])
	day, _ := strconv.Atoi(dateComponents[2])
	hour, _ := strconv.Atoi(dateComponents[3])
	minute, _ := strconv.Atoi(dateComponents[4])
	
	// Crie um objeto time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Analise as solicitações de formato
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Escreva seu código abaixo
	// Exiba o cabeçalho da aplicação
	// Exiba o horário de origem
	// Processe cada solicitação de formato e exiba as saídas formatadas
	// Calcule e exiba as estatísticas
	// Exiba as informações de referência
	// Exiba 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

Pratique por conta própria: Compilador de Go online