Newsgroup: it.comp.java
Titolo: aiuto per GregorianCalendar

Prima di tutto saluto tutti, dato che sono nuovo.
Poi vi chiedo se mi aiutate postandomi un esempio di come convertire una 
data già in gregoriano in una data del calendario normale; ho guardato 
l'help ma non ci ho capito molto :-((
Diciamo che io ho fatto:
int calenda= 2443083;
GregorianCalendar Prova= new GregorianCalendar();
Date Ora=Prova.getTime();
cosi dovrei avere nella variabile ORA la data... ma mi sa che sbaglio!
Grazie, Max

 Date Ora=Prova.getTime();
Bene, adesso hai la data attuale. A te cosa serve, una data specifica? 
Presa da dove?
bye
DKano

ho fatto un pò di casino...allora
int calenda= 2443083
è calenda è la data in gragoriano che pesco da un campo di un database...
GregorianCalendar Prova= new GregorianCalendar();
lo sò, ma è una prova... :-D
ora io vorrei convertire la variabile calenda, che contiene la data in 
gregoriano e vedere a che data corrisponde nel calendario attuale...
spero di essere stato chiaro... grazie!
-- 
Max

int calenda= 2443083;
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(calenda);
ora in gc c'e' la data corrispondente al numerazzo 'calenda'...

 è calenda è la data in gragoriano che pesco da un campo di un database...
Credo che ci sia un pò di confusione. La data in che formato è? La data 
"gregoriana" sarebbe quella normale, essendo il calendario gregoriano 
l'attuale calendario. Tu forse parli della "julian date"? Questa qui? 
http://webexhibits.org/calendars/calendar-christian.html#SECTION003120000000000000000
Lì ci sono le formule di conversione, credo si trovino anche classi già 
fatte in giro.
Altrimenti non ho capito il formato della data in 'calenda'
bye
DKano

Ops,
gc.setTimeInMillis(calenda);
comunque bisogna capire che roba e' quel numero (24430083)

 ha scritto nel messaggio 
news:1131715993....@z14g2000cwz.googlegroups.com...


 comunque bisogna capire che roba e' quel numero (24430083)
ok, allora facendo questo codice:
String esponi="";
GregorianCalendar datina= new GregorianCalendar ();
esponi=datina.get(GregorianCalendar.DAY_OF_MONTH) + "/" +
                (datina.get(GregorianCalendar.MONTH)+1)
                + "/" +(datina.get(GregorianCalendar.YEAR));
riesco ad ottenere 11/11/2005, perchè lui prende come data quella di oggi, 
mentre invece io vorrei darle in pasto il valore, per esempio, 23453684 che 
corrisponderebbe come risultato al 09/11/2005.
la domanda è quindi: come faccio a usare la variabile PIPPO che ha valore 
23453684 preso da un db come data da convertire in calendario , cioè 
09/11/2005?
spero di essere stato chiaro questa volta...
Max 

mi sa che ho scritto una cavolata a cui non sapete come rispondere senza 
insultarmi?? ^__^
Max

 spero di essere stato chiaro questa volta...
ehm... ma ti sei riletto?...:-)
dov'e' la variabile PIPPO?
a cosa serve "esponi" ?
comunque..
come ti ho gia' scritto
con il metodo setTimeInMillis(long millis) metti l'orologio del
calendar sull'ora che gli passi (in millisecondi)
quindi se quel numero : "23453684" corrisponde alla data 09/11/2005
allora il tuo oggetto calendar dopo la chiamata al metodo
setTimeInMillis avra' la data 9/11/2005 (sempre che quel numero
corrisponda a quella data (il che non mi pare proprio, dato che
11/11/2005 corrisponde in millisecondi a 1131725486343 (a parte le
ore,minuti,secondi e millisecondi) )
quindi rinnovo la domanda...


allora, proima di tutto grazie per il tempo perso ascoltandomi ..:-D
riparto da zero, cercando di essere più chiaro.
Ho un database con un campo data espresso in calendario giuliano (o 
gregoriano, non ho ancora capito, comunque un record ha un valore, per 
esempio, di 2453686 che corrisponde alla data 11/11/2005, cioè oggi).
Ora, dopo aver letto il record di questo database,  devo convertire questo 
valore del campo data che io leggo con la select e che faccio diventare una 
variabile (la famosa variabile PIPPO) in una data del calendario normale. 
Quindi io faccio una select, mi ritorna il valore 2453686 e io devo mostrare 
a video non quel valore ma il corrispettivo in data odierna, cioè 
11/11/2005.
Spero ora di essermi spiegato meglio...
Max

 11/11/2005.
Altra cosa: per formattare una data non usare la composizione delle 
stringhe, usa la classe SimpleDateFormat! Calendar.getTime() ti ritorna 
la data del calendar.
bye
DKano

 11/11/2005.
2453686 e' il 29 ottobre 2005 del calendario giuliano, che equivale 
all'11 novembre 2005 di quello gregoriano!
Devi cercare un po' in giro qual e' il metodo per ottenere la data 
giuliana a partire dal giorno giuliano (il tuo numero) e poi convertirlo 
in giorno gregoriano (approssimativamente 13 giorni di differenza).
Saluti
CarMas

 giuliana a partire dal giorno giuliano (il tuo numero) 
Mi auto-rispondo per venirti ancora incontro. Google dice:
Julian days simply enumerate the days and fraction which have elapsed 
since the start of the Julian era, which is defined as beginning at noon 
on Monday, 1st January of year 4713 B.C.E. in the Julian calendar.
Quindi, il giorno 0 e' il 1 gennaio -4712 (cioe' il 4713AC, occhio 
all'anno zero) e il giorno 1 inizia alle 12 di quel giorno. Se fai due 
conti, il 1 gennaio 2000 e' il giorno giuliano 2451545.
Vai di matematica.
Saluti
CarMas

 Vai di matematica.
O di google:-) Nell'url del mio pre-precedente post c'e' la formula e 
altre notiziole sull'argomento. Ma basta cercare 'julian date'
bye
DKano

se ti può essere utile
devi convertire la funzione in java
se non ne hai voglia cerca su google
ciao antonio
la descrizione di floor è questa
double floor(double x);
Description
Rounds down.
floor finds the largest integer not greater than x.
double DataGiuliana(double anno,double mese,double giorno,double ora,double
minuti,double secondi)
{
int    HH,C,MM,SS;
int    Y,M,G;
double totale,SommaSecondi,KK,A,B,D,jd,Giuliana;
Y  = (int)anno;
M  = (int)mese;
G  = (int)giorno;
HH = (int)(ora * 60 * 60);
MM = (int)(minuti * 60);
SS = (int)(secondi);
SommaSecondi = HH + MM + SS;
totale = SommaSecondi / 86400;
if (M > 2){B = 0;}
else{Y = Y - 1;
M = M + 12;}
KK = Y + M / 100 + G / 1000;
if (KK > 1582.1015){
A = floor(Y / 100);
B = 2 - A + floor(A / 4);}
C = (int)floor(365.25 * Y);
D = floor(30.6001 * (M + 1));
jd = B + C + D + G + 1720994.5;
jd = floor(jd * 10000) / 10000;
Giuliana = (jd + totale);
return Giuliana;
}

questa invece è quella che cercavi
ciao antonio
double GiulianaData(short int SELECT,double GIULIANA)
{
double jd,Z,F,A,AA,B,C,D,E,G,GG,Y,K,M,ORE,MIN,SEC,GiuOr,GiuMi,GiuSe;
jd = GIULIANA;
Z = floor(jd + 0.5);
F = jd + 0.5 - Z;
if (Z < 2299161) {goto sei;} else {goto sette;}
sei: A = Z;
goto nove;
sette: AA = floor((Z - 1867216.25) / 36524.25);
A = Z + 1 + AA - floor(AA / 4);
nove:
B = A + 1524;
C = floor((B - 122.1) / 365.25);
D = floor(365.25 * C);
E = floor((B - D) / 30.6001);
G = B - D + F - floor(30.6001 * E);
GG = floor(G);
M = E - 1;
if (E < 13.5) {goto cento;}
M = E - 13;
cento: Y = C - 4716;
if (M > 2.5) {goto duecento;}
Y = C - 4715;
duecento:
K = G - floor(G);
ORE = (K * 86400) / 60 / 60;
GiuMi = (ORE - floor(ORE));
MIN = GiuMi * 60;
SEC = (MIN - floor(MIN)) * 60;
GiuOr = floor(ORE);
GiuMi = floor(MIN);
GiuSe = floor(SEC + 0.0000001);
if (SELECT == 1){return Y;}
if (SELECT == 2){return M;}
if (SELECT == 3){return GG;}
if (SELECT == 4){return GiuOr;}
if (SELECT == 5){return GiuMi;}
if (SELECT == 6){return GiuSe;}
return 0;
}

Grazie per l'esempio di codice, ma mi dà errore.... dove c'è il double 
GiulianaData(short int SELECT,double GIULIANA) lui si aspetta un ; dopo 
GiulianaData e non una parentesi...
Max 

 GiulianaData e non una parentesi...
...
stiamo parlando di metodi o di variabili?
Saluti
CarMas

se dovesse risultare OT questo codice
io te lo posto ugualmente
è il codice originale scritto in QBasic
preso da un cd astronomico
che poi ho convertito in c++
la sintassi del c++ del codice
che ti o postato precedentemente
non mi sembra che presenti molti problemi
nella conversione al java
forse sbagli qualcosa nella conversione
nb. in astronomia è tutto double
per gli interi e un problema che devi
risolvere da solo
oppure chiedendo un po quà e un po là
ti dico subito che di java ne so poco
ciao antonio
10 Rem GIORNO GIULIANO --> DATA CIVILE
20 Cls
30 INPUT "DATA GIULIANA: ", JD#
40 Z = Int(JD# + 0.5): F = JD# + 0.5 - Z
50 If Z < 2299161 Then GoTo 60 Else GoTo 70
60 A = Z: GoTo 90
70 AA = Int((Z - 1867216.25) / 36524.25)
80 A = Z + 1 + AA - Int(AA / 4)
90 B = A + 1524
100 C = Int((B - 122.1) / 365.25)
110 D = Int(365.25 * C)
120 E = Int((B - D) / 30.6001)
130 G = B - D + F - Int(30.6001 * E)
140 GG = Int(G * 10000) / 10000
150 M = E - 1
160 If E < 13.5 Then GoTo 180
170 M = E - 13
180 Y = C - 4716
190 If M > 2.5 Then GoTo 210
200 Y = C - 4715
210 Print "DATA CIVILE: "; Y; "/"; M; "/"; G
220 End
10 Rem DATA CIVILE --> GIORNO GIULIANO
20 Cls
30 INPUT "ANNO, MESE, GIORNO: ", Y, M, G
40 YY = Y: MM = M
50 If M > 2 Then GoTo 80
60 Y = Y - 1
70 M = M + 12
80 B = 0
90 KK = YY + MM / 100 + G / 10000
100 If KK < 1582.1015 Then GoTo 130
110 A = Int(Y / 100)
120 B = 2 - A + Int(A / 4)
130 C# = Int(365.25 * Y)
140 D = Int(30.6001 * (M + 1))
150 JD# = B + C# + D + G + 1720994.5
160 JD# = Int(JD# * 10000) / 10000
170 Print "DATA GIULIANA: "; JD#
180 End

 ha scritto nel messaggio 
news:4378634b$0$13270$4faf...@reader2.news.tin.it...
