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.
year, month, day) |
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= numero dei giorni nel dato mese ed anno
Se viene passato un argomento al di fuori di questi intervalli, viene sollevata l'eccezione ValueError.
Altri costruttori, tutti definiti come metodi di classe:
) |
date.fromtimestamp(time.time())
.
timestamp) |
ordinal) |
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:
date(MINYEAR, 1, 1)
.
date(MAXYEAR, 12, 31)
.
timedelta(days=1)
.
Attributi delle istanze (in sola lettura):
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:
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.
timedelta.seconds
e timedelta.microseconds
vengono ignorati.
timedelta.seconds
e timedelta.microseconds
sono posti uguali a zero e dopo il calcolo è vera l'espressione
date2 + timedelta == time1
.
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:
year, month, day) |
d == date(2002, 12, 31)
, allora
d.replace(day=26)
corrisponde a date(2000, 12, 26)
.
) |
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))
) |
date.fromordinal(d.toordinal()) == d
.
) |
date(2002, 12, 4).weekday()
corrisponde a 2
, ovvero un
Mercoledì. Vedete anche isoweekday().
) |
date(2002, 12, 4).isoweekday()
corrisponde a 3
, ovvero
un Mercoledì. Vedete anche weekday() e
isocalendar().
) |
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)
.
) |
date(2002, 12, 4).isoformat()
corrisponde a
'2002-12-04'
.
) |
str(d)
è
equivalente a d.isoformat()
.
) |
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.
format) |
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.