Menu
Coddy logo textTech

Formatando o Tempo

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

Uma vez que você tenha um objeto time.Time, você frequentemente precisará convertê-lo em um formato de string legível. Go usa uma abordagem única para formatação de tempo que é diferente de outras linguagens de programação.

Em vez de usar códigos de formatação como %Y-%m-%d, o Go usa uma data de referência como modelo. Esta 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 (3:04:05 PM) Mountain Standard Time.

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

A ideia principal é que você organiza os componentes da data de referência no padrão que deseja. Para um 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 tempo do Go memorável e flexível. Depois de se lembrar da data de referência, você pode criar qualquer formato simplesmente organizando seus componentes no padrão desejado.

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 sistema de exibição de data e hora multi-formato que formata objetos time.Time usando o sistema exclusivo de layout de data de referência do Go. Este desafio testará sua habilidade 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" (ex: "2023:12:25:14:30")
  • Uma string contendo solicitações de formato separadas por vírgulas no formato "format1,format2,format3" (ex: "iso,american,european,time12,time24")

Sua tarefa é:

  1. Analisar a primeira entrada dividindo-a por 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 para a localização, 0 para segundos e nanossegundos)
  4. Exibir o cabeçalho da aplicação: "=== DATE/TIME FORMATTER ==="
  5. Exibir o tempo de origem: "Source time: [complete_time_object]"
  6. Analisar a segunda entrada dividindo-a por 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 de tempo, o pacote strings para dividir as 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 tempo do Go usa a data de referência Mon Jan 2 15:04:05 MST 2006 como um modelo, e você organiza esses componentes no padrão que desejar. Este desafio demonstra como o sistema exclusivo de formatação baseado em layout do Go funciona, fazendo com que você aplique vários padrões de formato diferentes ao mesmo objeto de tempo.

Folha de consulta

Go usa uma abordagem única de data de referência para formatação de tempo: Mon Jan 2 15:04:05 MST 2006

Para formatar um objeto time.Time, use o método Format com padrões de layout baseados na data de referência:

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

Padrões de layout comuns:

  • "2006-01-02" - Formato ISO (AAAA-MM-DD)
  • "01/02/2006" - Formato americano (MM/DD/AAAA)
  • "02/01/2006" - Formato europeu (DD/MM/AAAA)
  • "January 2, 2006" - Formato longo
  • "3:04 PM" - Horário de 12 horas
  • "15:04" - Horário de 24 horas
  • "Monday, January 2, 2006 at 3:04 PM" - Formato completo
  • "20060102" - Formato compacto

A chave é organizar os componentes da data de referência no padrão desejado.

Experimente você mesmo

package main

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

func main() {
	// Ler entrada
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Analisar componentes da data dividindo por dois-pontos
	dateComponents := strings.Split(dateInput, ":")
	
	// Converter componentes de string para 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])
	
	// Criar objeto time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Analisar solicitações de formato
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Escreva seu código abaixo
	// Exibir o cabeçalho da aplicação
	// Exibir o horário de origem
	// Processar cada solicitação de formato e exibir as saídas formatadas
	// Calcular e exibir estatísticas
	// Exibir informações de referência
	// Exibir 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