Menu
Coddy logo textTech

Formattare l'ora

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 60 di 68.

Una volta ottenuto un oggetto time.Time, spesso dovrai convertirlo in una stringa leggibile. Go utilizza un approccio unico alla formattazione dell’ora, diverso da quello di altri linguaggi di programmazione.

Invece di usare codici di formato come %Y-%m-%d, Go usa una data di riferimento come modello. Questa data di riferimento è Mon Jan 2 15:04:05 MST 2006, che rappresenta il momento esatto: 2 gennaio 2006, alle 15:04:05, ora standard della montagna.

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

L'intuizione fondamentale è disporre i componenti della data di riferimento secondo il formato desiderato. Per un formato YYYY-MM-DD, usi "2006-01-02" perché è così che appare la data di riferimento in quel formato. Per un formato diverso, come Jan 2, 2006, useresti "Jan 2, 2006".

Questo approccio basato sul layout rende la formattazione dell'ora in Go facile da ricordare e flessibile. Una volta memorizzata la data di riferimento, puoi creare qualsiasi formato semplicemente disponendone i componenti secondo lo schema desiderato.

challenge icon

Sfida

Facile

Crea un sistema di visualizzazione di date e orari in più formati che formatti gli oggetti time.Time usando l’esclusivo sistema di layout basato sulla data di riferimento di Go. Questa sfida metterà alla prova la tua capacità di usare il metodo Format con diversi modelli di layout per creare varie rappresentazioni di date e orari.

Riceverai due input:

  • Una stringa contenente informazioni sulla data nel formato "year:month:day:hour:minute" (ad es., "2023:12:25:14:30")
  • Una stringa contenente richieste di formattazione separate da virgole nel formato "format1,format2,format3" (ad es., "iso,american,european,time12,time24")

Il tuo compito è:

  1. Analizzare il primo input suddividendolo in corrispondenza dei due punti per estrarre i valori di anno, mese, giorno, ora e minuto
  2. Convertire questi valori stringa in interi usando il pacchetto strconv
  3. Creare un oggetto time.Time usando time.Date con i valori analizzati (usa time.UTC per il fuso orario, 0 per i secondi e i nanosecondi)
  4. Visualizzare l’intestazione dell’applicazione: "=== DATE/TIME FORMATTER ==="
  5. Visualizzare l’orario di origine: "Source time: [complete_time_object]"
  6. Analizzare il secondo input suddividendolo in corrispondenza delle virgole per ottenere le richieste di formattazione
  7. Visualizzare l’intestazione della formattazione: "Formatted outputs:"
  8. Per ogni richiesta di formattazione, usare la stringa di layout appropriata con il metodo Format:
    • Per "iso": usa il layout "2006-01-02" e visualizza "ISO format: [formatted_result]"
    • Per "american": usa il layout "01/02/2006" e visualizza "American format: [formatted_result]"
    • Per "european": usa il layout "02/01/2006" e visualizza "European format: [formatted_result]"
    • Per "long": usa il layout "January 2, 2006" e visualizza "Long format: [formatted_result]"
    • Per "time12": usa il layout "3:04 PM" e visualizza "12-hour time: [formatted_result]"
    • Per "time24": usa il layout "15:04" e visualizza "24-hour time: [formatted_result]"
    • Per "full": usa il layout "Monday, January 2, 2006 at 3:04 PM" e visualizza "Full format: [formatted_result]"
    • Per "compact": usa il layout "20060102" e visualizza "Compact format: [formatted_result]"
  9. Calcolare e visualizzare le statistiche:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Visualizzare le informazioni di riferimento:
    • "=== 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. Visualizzare il messaggio di completamento: "Date formatting completed using Go's layout system"

Usa il pacchetto time per le operazioni sugli orari, il pacchetto strings per suddividere le stringhe di input, il pacchetto strconv per convertire le stringhe in interi e il pacchetto fmt per l’output formattato. Ricorda che la formattazione degli orari in Go usa come modello la data di riferimento Mon Jan 2 15:04:05 MST 2006 e che puoi disporre questi componenti secondo il modello desiderato. Questa sfida illustra il funzionamento dell’esclusivo sistema di formattazione basato sui layout di Go, chiedendoti di applicare più modelli di formattazione diversi allo stesso oggetto temporale.

Provalo tu

package main

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

func main() {
	// Leggi l'input
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Analizza i componenti della data separandoli in corrispondenza dei due punti
	dateComponents := strings.Split(dateInput, ":")
	
	// Converti i componenti delle stringhe in numeri interi
	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])
	
	// Crea un oggetto time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Analizza le richieste di formattazione
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Scrivi il tuo codice qui sotto
	// Visualizza l'intestazione dell'applicazione
	// Visualizza l'ora di origine
	// Elabora ogni richiesta di formattazione e visualizza i risultati formattati
	// Calcola e visualizza le statistiche
	// Visualizza le informazioni di riferimento
	// Visualizza il messaggio di completamento
	
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online