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-26L'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.
Sfida
FacileCrea 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 è:
- Analizzare il primo input suddividendolo in corrispondenza dei due punti per estrarre i valori di anno, mese, giorno, ora e minuto
- Convertire questi valori stringa in interi usando il pacchetto
strconv - Creare un oggetto
time.Timeusandotime.Datecon i valori analizzati (usatime.UTCper il fuso orario, 0 per i secondi e i nanosecondi) - Visualizzare l’intestazione dell’applicazione:
"=== DATE/TIME FORMATTER ===" - Visualizzare l’orario di origine:
"Source time: [complete_time_object]" - Analizzare il secondo input suddividendolo in corrispondenza delle virgole per ottenere le richieste di formattazione
- Visualizzare l’intestazione della formattazione:
"Formatted outputs:" - 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]"
- Per
- Calcolare e visualizzare le statistiche:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 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"
- 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
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online