Newsgroup: it.comp.lang.visual-basic
Titolo: Anno Giuliano

Ciao a tutti.
Devo collegarmi ad una tabella Access in cui le date sono espresse
con la forma numerica del Calendario Giuliano (o almeno credo).
Qualcuno conosce l'algoritmo per convertire in data odierna gg/mm/aaaa ?
Grazie ancora a tutti.
Jeff
La...@usa.net


Se intendi Data Giuliana, quella usata in astronomia, prova queste (andranno
sistemate un po', le ho copiate da uno stampato, era in QBasic, mi pare...):
Altrimenti il Calendario Gliuliano e' quello che era in vigore prima del
Calendario Gregoriana (quello attualmente in uso) ed e' come il nostro, ma
senza il giorno in piu' (29 Feb.), perche' non esistevano gli anni bisestili
(sono stati introdotti da Papa Gregorio XIII nel 1582).
Function Civil2JulianDate(ByVal Year As Integer, ByVal Month As Integer,
ByVal Day As Integer) As Double
    Dim a As Integer
    Dim b As Long
    Dim c As Long
    Dim CheckDate As Double
    Dim JD As Double
    CheckDate = Year + (Month / 100) + (Day / 10000)
    ' If month is Genuary or February, take it as 13th and 14th month af the
previous year.
    If (Month < 3) Then
        Year = Year - 1
        Month = Month + 12
    End If
    If (CheckDate >= 1582.1015) Then
        ' If date is after the Gregorian Reform (modern calendar,
        ' with leap years), adjust for leap years.
        a = 2 - (Year \ 100) + (Year \ 400)
    Else
        ' Old calendar, without leap years, no need for adjustements.
        a = 0
    End If
    ' Number of days from year 0 to start of year.
    b = Int(365.25 * Year)
    ' Number of days in months from start of this year.
    c = Int(30.6001 * (Month + 1))
    ' Sum everything and the Julian Date for year 0.
    Civil2JulianDate = a + b + c + Day + 1720994.5
End Function
Sub Julian2CivilDate(ByVal JDate As Double, ByRef Year As Integer, ByRef
Month As Integer, ByRef Day As Integer)
    Dim z As Long
    Dim f As Double
    Dim a As Long
    Dim aa As Long
    Dim b As Long
    Dim c As Long
    Dim d As Long
    Dim e As Long
    z = Int(JDate + 0.5)
    f = (JDate + 0.5) - z
    If (z < 2299161) Then
        a = z
    Else
        aa = Int((z - 1867216.25) \ 36524.25)
        a = z + 1 + aa - (aa \ 4)
    End If
    b = a + 1524
    c = Int((b - 122.1) / 365.25)
    d = Int(365.25 * c)
    e = Int((b - d) / 30.6001)
    Day = b - d + f - Int(30.6001 * e)
    Month = e - 1
    If (e >= 13.5) Then
        Month = e - 13
    End If
    Year = c - 4716
    If (Month <= 2.5) Then
        Year = c - 4715
    End If
End Sub
--
Roal Zanazzi
z...@iol.it

(sono stati introdotti da Papa Gregorio XIII nel 1582).
Eh no... c'era e come il 29 Febbraio, ma ogni quattro anni (non c'era la
regola degli anni multipli di 100 e di 400). Un anno veniva fatto durare
365.25 giorni, non 365.2425 come oggi. Visto che siamo in tema, i Maya
avevano mille anni prima di Papa Gregorio un calendario di 365.242 giorni.
Paolo

(sono stati introdotti da Papa Gregorio XIII nel 1582).
Errore. Sono stati introdotti nella riforma del calendario
effettuata da Giulio Cesare. La riforma gregoriana e'
consistita nell'eliminare tre giorni ogni quattro secoli,
precisamente togliendo il 29 febbraio degli anni 
secolari non multipli di 400. Inoltre Papa Gregorio ha
provveduto a spostare in avanti il calendario di un
certo numero di giorni per correggere gli errori 
accumulatisi dal tempo della riforma Giuliana.
-------------------------------
Louis Cretier  R1100RS/R80GS TO      
http://www.show.it/lcretier.htm
-------------------------------
"L'uomo accorto impara dai propri errori
 il saggio impara da quelli altrui"


Si, hai ragione... stavo andando a memoria (ed e' una cosa che NON dovrei
fare, conoscendomi :-)
In realta' Papa Gregori ha introdotto l'aggiustamento per gli anni bisestili
multipli di 100 (che non sono bisestili SE non divisibili anche per 400,
quindi 1900 NO, 2000 SI, giusto?).
Tornando alle funzioni che ho postato, dopo una breve verifica, mi sono
accorto che non sono sicuro del loro funzionamento per anni negativi. Pero'
non ho il tempo di controllare meglio e, comunque, se a Iamak non servono
gli anni negativi, le funzioni ... funzionano :-)
--
Roal Zanazzi
z...@iol.it


10 giorni, per l'esattezza, da 4 al 15 Ottobre 1582.
--
Roal Zanazzi
z...@iol.it