Newsgroup: it.comp.java
Titolo: Problema con anno bisestile

Eseguendo la popolazione automatica di una tabella con dati generati, mi 
sono trovato con il seguente problema:
org.postgresql.util.PSQLException: ERROR: date/time field value out of 
range: "1400-02-29 +01:00:00"
Ovvero, PostgreSQL (il database che ho preso come riferimento) mi ritorna un 
errore in quanto sto tentando di inserire un anno bisestile che secondo lui 
non dovrebbe esistere. Nel senso, secondo le regole del calendario 
gregoriano, si definiscono anni bisestili tutti quegli anni divisibili per 4 
(anni non secolari) o per 400 (anni secolari), ma non quelli divisibili per 
100 (anni secolari). Ora, facendo un po' di conti, l'anno 1400 non e` 
bisestile, in quanto non e` divisibile per 400. A questo punto, mi chiedo: 
sono incappato in un bug della classe Calendar? Se si, come lo aggiro? Gli 
ambienti che utilizzo sono Java 6u17 e PostgreSQL 8.4.2
Enrico
P.S. sono a conoscenza del fatto che il calendario gregoriano e` entrato in 
vigore nel 1582, ma questo non significa che le regole da esso definite non 
siano applicabili anche ad anni precedenti

 ha scritto nel 
messaggio news:hjio3t$44a$1...@alice.wonderland.home...

Ciao, Enrico.
Forse non ho capito bene il tuo problema: dalle tue verifiche (corrette) ti 
risulta che il 1400 non sia stato un anno bisestile; quindi, il 29/02/1400 
non � una data valida; se tenti di inserire nel tuo db la data 1400-02-29 il 
server ti ritorna un errore ... quindi � tutto ok!
Cosa � che mi sfugge?
PS: sono nuovissimo del forum e non ho avuto ancora il tempo di presentarmi, 
ma lo far� presto. Chiedo scusa a tutti per l'entrata "a gamba tesa". 

 ha scritto nel messaggio 
news:4b5cf828$0$1131$4faf...@reader1.news.tin.it...

Ok ... adesso ho capito :) La tua domanda riguarda la classe Calendar e non 
il server SQL ... sorry ...
Regola nr. 1: non rispondere mai ad una domanda su un forum se non l'hai 
letta attentamente :) 


wrote:


 Regola nr. 1: non rispondere mai ad una domanda su un forum
Non � un forum :p
E' un gruppo di discussione.

 1500, 1400, 1300... sono tutti bisestili".
Quindi, secondo quanto riportato (e che in effetti non avevo notato), il 
problema e` PostgreSQL. Indaghero` in tal senso
Enrico

letta attentamente :) 
Regola nr.2: quotare solo il necessario :)

siano applicabili anche ad anni precedenti
Che discorso �? :)
Se entra in vigore nel 1582, le regole valgono da quando entra in
vigore in poi.
Da 
http://it.wikipedia.org/wiki/Calendario_gregoriano
:
"Per recuperare i dieci giorni perduti, si stabil� che il giorno
successivo al 4 ottobre 1582 fosse il 15 ottobre; inoltre, per evitare
interruzioni nella settimana, si convenne che il 15 ottobre fosse un
venerd�, dal momento che il giorno precedente, il 4, era stato un
gioved�. Anche i paesi che adottarono il calendario gregoriano
successivamente dovettero stabilire un analogo "salto di giorni" per
riallinearsi (vedi la tabella sopra).
Per modificare la durata media dell'anno, venne cambiata la regola che
decide gli anni bisestili: secondo la nuova regola, gli anni la cui
numerazione � multipla di 100 sono bisestili soltanto se essa � anche
multipla di 400: vale a dire, sono bisestili gli anni 1600, 2000,
2400... mentre non lo sono gli anni 1700, 1800, 1900, 2100, 2200,
2300... Tutti gli altri anni la cui numerazione � multipla di 4
rimangono bisestili. (Per i secoli precedenti resta valido il
calendario giuliano quindi gli anni 1500, 1400, 1300... sono tutti
bisestili.)"

 vigore in poi.
Si, lo so. Pero` sono stato fuorviato dal comportamento di Python (ovvero 
applica le regole del calendario gregoriano anceh a date precedenti al 1582) 
e da questo: 
http://it.wikipedia.org/wiki/Bisestile
Il calendario gregoriano si applica dal 1582, anno della sua introduzione. 
Benché sia teoricamente possibile estenderlo anche agli anni precedenti, 
normalmente per questi si usa il calendario giuliano.
Enrico

 normalmente per questi si usa il calendario giuliano.
non si puo' estendere agli anni precedenti il 1582, perche' altrimenti
avresti un calcolo sbagliato dei giorni, rispetto alla storia.
Ciao Jack