Un Time in Go è un tipo che descrive un momento nel tempo.
Le informazioni su data e ora si possono accedere, confrontare e manipolare tramite i suoi metodi, ma ci sono anche alcune funzioni richiamate direttamente sul pacchetto time.
La data e l'ora attuali si possono ottenere tramite la funzione time.Now.
La funzione time.Parse esegue il parsing delle stringhe in valori di tipo Time.
Go ha un modo tutto suo di definire il layout che ti aspetti per il parsing.
Devi scrivere un esempio del layout usando i valori di questo timestamp speciale:
Mon Jan 2 15:04:05 -0700 MST 2006.
Per esempio:
import "time"
func parseTime() time.Time {
date := "Tue, 09/22/1995, 13:00"
layout := "Mon, 01/02/2006, 15:04"
t, err := time.Parse(layout,date) // time.Time, error
}
// => 1995-09-22 13:00:00 +0000 UTC
Il metodo Time.Format() restituisce una rappresentazione sotto forma di stringa del tempo.
Proprio come con la funzione Parse, anche il layout di destinazione si definisce tramite un esempio che usa i valori del timestamp speciale.
Per esempio:
import (
"fmt"
"time"
)
func main() {
t := time.Date(1995,time.September,22,13,0,0,0,time.UTC)
formattedTime := t.Format("Mon, 01/02/2006, 15:04") // string
fmt.Println(formattedTime)
}
// => Fri, 09/22/1995, 13:00
Per un layout personalizzato, usa una combinazione di queste opzioni. In Go sono disponibili anche delle costanti di formattazione predefinite per date e timestamp.
| Tempo | Opzioni |
|---|---|
| Anno | 2006 ; 06 |
| Mese | Jan ; January ; 01 ; 1 |
| Giorno | 02 ; 2 ; _2 (con lo 0 iniziale) |
| Giorno della settimana | Mon ; Monday |
| Ora | 15 ( formato orario a 24 ore ) ; 3 ; 03 (AM o PM) |
| Minuto | 04 ; 4 |
| Secondo | 05 ; 5 |
| Indicatore AM/PM | PM |
| Giorno dell'anno | 002 ; __2 |
Il tipo time.Time ha vari metodi per accedere a una particolare ora. Ad esempio Ora: Time.Hour(), Mese: Time.Month().
Per saperne di più su come funziona, consulta la documentazione ufficiale.
Il pacchetto time include un altro tipo, Duration, che rappresenta il tempo trascorso, oltre al supporto per località/fusi orari, timer e altre funzionalità correlate che saranno trattate in un altro concetto.
In questo esercizio lavorerai a un sistema di pianificazione degli appuntamenti per un salone di bellezza che ha aperto il 15 settembre 2012.
Hai cinque attività, che riguarderanno tutte le date degli appuntamenti.
Implementa la funzione Schedule che analizza una rappresentazione testuale della data di un appuntamento e la converte nel formato time.Time corrispondente:
Schedule("7/25/2019 13:45:00")
// => 2019-07-25 13:45:00 +0000 UTC
Implementa la funzione HasPassed che riceve una data di appuntamento e verifica se l'appuntamento è ormai nel passato:
HasPassed("July 25, 2019 13:45:00")
// => true
Implementa la funzione IsAfternoonAppointment che riceve una data di appuntamento e verifica se l'appuntamento cade nel pomeriggio (>= 12:00 e < 18:00):
IsAfternoonAppointment("Thursday, July 25, 2019 13:45:00")
// => true
Implementa la funzione Description che riceve una data di appuntamento e restituisce una descrizione di quella data e di quell'ora:
Description("7/25/2019 13:45:00")
// => "You have an appointment on Thursday, July 25, 2019, at 13:45."
Implementa la funzione AnniversaryDate che restituisce la data dell'anniversario dell'apertura del salone per l'anno corrente in UTC.
Ipotizzando che l'anno corrente sia il 2020:
AnniversaryDate()
// => 2020-09-15 00:00:00 +0000 UTC
Nota: il valore restituito è un time.Time e l'ora del giorno non ha importanza.
Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.