6.9.3 Oggetti di tipo date

Un oggetto di tipo date rappresenta una data (anno, mese e giorno) in un calendario idealizzato corrispondente al corrente calendario Gregoriano, esteso indefinitamente in entrambe le direzioni. Il primo Gennaio dell'anno 1 viene definito come il giorno numero uno, il 2 Gennaio dell'anno 1 è il giorno due, e così via. Questo corrisponde alla definizione di calendario "Gregoriano prolettico" nel libro di Dershowitz and Reingold Calendrical Calculations, in cui tale calendario viene usato come base per tutti i calcoli. Vedete questo libro per conoscere gli algoritmi di conversione tra il calendario Gregoriano prolettico e molti altri sistemi di calendarizzazione.

class date( year, month, day)
Tutti gli argomenti sono obbligatori. Gli argomenti possono essere interi o interi long, all'interno dei seguenti intervalli:

Se viene passato un argomento al di fuori di questi intervalli, viene sollevata l'eccezione ValueError.

Altri costruttori, tutti definiti come metodi di classe:

today( )
Restituisce la data corrente in tempo locale. È equivalente a date.fromtimestamp(time.time()).

fromtimestamp( timestamp)
Restitusce la data in tempo locale corrispondente al valore di riferimento temporale in standard POSIX specificato come input, ad esempio quello restituito da time.time(). Questo metodo può sollevare l'eccezione ValueError se il riferimento temporale è fuori dall'intervallo dei valori supportati dall'implementazione disponibile della funzione C localtime(). Di solito i valori vengono ristretti agli anni compresi tra il 1970 e il 2038. Notate che su sistemi non POSIX che includono i "leap seconds" nella loro rappresentazione di riferimento temporale, tali secondi vengono ignorati dalla funzione fromtimestamp().

fromordinal( ordinal)
Restituisce la data corrispondente all'ordinale del calendario Gregoriano prolettico, dove il primo Gennaio dell'anno 1 corrisponde all'ordinale 1. A meno che 1 <= ordinal <= date.max.toordinal(), viene sollevata un'eccezione ValueError. Per ogni oggetto d di tipo date, è vera la condizione: date.fromordinal(d.toordinal()) == d.

Attributi delle classi:

min
La data rappresentabile più lontana nel passato, date(MINYEAR, 1, 1).

max
La data rappresentabile più lontana nel futuro, date(MAXYEAR, 12, 31).

resolution
La più piccola differenza possibile tra oggetti di tipo date considerati non uguali, equivalente a timedelta(days=1).

Attributi delle istanze (in sola lettura):

year
Anno. Compreso tra MINYEAR e MAXYEAR, limiti inclusi.

month
Mese. Compreso tra 1 e 12, limiti inclusi.

day
Giorno. Compreso tra 1 ed il numero di giorni del mese specificato nell'anno specificato.

Operazioni supportate:

Operazione  Risultato 
date2 = date1 + timedelta date2 rappresenta una data che precede date1 di un numero di giorni pari a timedelta.days. (1)
date2 = date1 - timedelta Calcola date2 tale che date2 + timedelta == date1. (2)
timedelta = date1 - date2 (3)
date1 < date2 Deve essere vero. date1 viene considerato minore di date2 quando rappresenta una data precedente a quella di date2. (4)

Note:

(1)
date2 viene spostata in avanti nel tempo se timedelta.days > 0, viene spostata all'indietro se timedelta.days < 0. Dopo l'operazione risulta che date2 - date1 == timedelta.days. Vengono ignorati timedelta.seconds e timedelta.microseconds. Se il valore da assegnare a date2.year risulta minore di MINYEAR o maggiore di MAXYEAR, viene sollevata l'eccezione OverflowError.

(2)
Questo non è esattamente equivalente a "date1 + (-timedelta)", l'espressione "-timedelta" presa separatamente può provocare un overflow, mentre "date1 - timedelta" no. timedelta.seconds e timedelta.microseconds vengono ignorati.

(3)
Questa espressione è esatta e non può provocare overflow. timedelta.seconds e timedelta.microseconds sono posti uguali a zero e dopo il calcolo è vera l'espressione date2 + timedelta == time1.

(4)
In altre parole, date1 < date2 è vera se e solo se è vera date1.toordinal() < date2.toordinal(). Per impedire che il confronto ricada nel caso predefinito del confronto tra gli indirizzi degli oggetti, il confronto fra oggetti di tipo date solitamente solleva l'eccezione TypeError se l'altro termine di paragone non è anch'esso un oggetto di tipo date. Tuttavia, viene invece restituito NotImplemented nel caso in cui l'altro termine di paragone abbia un attributo timetuple. Questa estensione al meccanismo di confronto consente che generi di oggetti date diversi possano avere la possibilità di implementare dei confronti, pur non essendo dello stesso tipo. Ad eccezione di questo caso, se un oggetto di tipo date viene confrontato con un oggetto di altro tipo, viene sollevata l'eccezione TypeError, a meno che il confronto non sia == oppure !=. In questi ultimi vengono restituiti rispettivamente False o True.

Gli oggetti di tipo date possono venire usati come chiavi di dizionario. In contesti booleani, tutti gli oggetti di tipo date vengono considerati valori veri.

Metodi delle istanze:

replace( year, month, day)
Restituisce una data con lo stesso valore dell'istanza a cui si applica, tranne che per quei membri per cui vengono specificati nuovi valori attraverso gli argomenti specificati. Ad esempio, se d == date(2002, 12, 31), allora d.replace(day=26) corrisponde a date(2000, 12, 26).

timetuple( )
Restituisce un oggetto di tipo time.struct_time come quelli restituiti da time.localtime(). Le ore, i minuti ed i secondi vengono posti a zero e l'opzione DST è -1. d.timetuple() è equivalente a time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), d.toordinal() - date(d.year, 1, 1).toordinal() + 1, -1))

toordinal( )
Restituisce l'ordinale prolettico Gregoriano della data, dove il primo Gennaio dell'anno 1 ha ordinale 1. Per ogni oggetto d di tipo date, vale la relazione date.fromordinal(d.toordinal()) == d.

weekday( )
Restituisce il giorno della settimana come intero, dove Lunedì è 0 e Domenica è 6. Per esempio l'espressione date(2002, 12, 4).weekday() corrisponde a 2, ovvero un Mercoledì. Vedete anche isoweekday().

isoweekday( )
Restituisce il giorno della settimana in forma di intero, dove Lunedì corrisponde a 1 e Domenica a 7. Per esempio, l'espressione date(2002, 12, 4).isoweekday() corrisponde a 3, ovvero un Mercoledì. Vedete anche weekday() e isocalendar().

isocalendar( )
Restituisce una tripla (anno ISO, numero ISO della settimana, giorno ISO della settimana).

Il calendario ISO è una variante largamente usata del calendario Gregoriano. Vedete il sito http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm per una buona spiegazione in materia.

Il calendario ISO consiste di 52 o 53 settimane piene, nel quale una settimana comincia di Lunedì e termina di Domenica. La prima settimana di un anno ISO è la prima settimana calendariale dell'anno Gregoriano che contiene un Giovedì. Questa viene definita settimana numero 1, e l'anno ISO in cui si trova quel Giovedì coincide con il suo anno Gregoriano.

Per esempio, l'anno 2004 comincia con un Giovedì, per cui la prima settimana dell'anno ISO 2004 comincia di Lunedì 29 Dicembre 2003 e termina con Domenica, 4 Gennaio 2004, e quindi l'espressione date(2003, 12, 29).isocalendar() corrisponde a (2004, 1, 1), e l'espressione date(2004, 1, 4).isocalendar() corrisponde a (2004, 1, 7).

isoformat( )
Restituisce una stringa che rappresenta la data in formato ISO 8601, cioè 'YYYY-MM-DD'. Per esempio, l'espressione date(2002, 12, 4).isoformat() corrisponde a '2002-12-04'.

__str__( )
Dato un oggetto d di tipo date, str(d) è equivalente a d.isoformat().

ctime( )
Restituisce una stringa che rappresenta la data, per esempio date(2002,12, 4).ctime() restituisce la stringa 'Wed Dec 4 00:00:00 2002'. L'espressione d.ctime() è equivalente a time.ctime(time.mktime(d.timetuple())) su piattaforme dove la funzione nativa C ctime() (che è chiamata da time.ctime() ma non da date.ctime()) è conforme allo standard C.

strftime( format)
Restituisce una stringa rappresentante la data, secondo quanto specificato da un esplicito formato stringa. I codici di formato relativo alle ore, ai minuti ed ai secondi risulteranno in valori zero. Vedete anche la sezione che descrive il comportamento di strftime().

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.