1 | ################################################################## |
---|
2 | #PIEDLOUP Sebastien |
---|
3 | #sebastien.piedloup@ipsl.jussieu.fr |
---|
4 | #juillet 2003 |
---|
5 | ################################################################## |
---|
6 | |
---|
7 | ################################################################## |
---|
8 | #Module qui definit un calendrier de 365 jours et qui renvoie une date valide |
---|
9 | ################################################################## |
---|
10 | |
---|
11 | |
---|
12 | |
---|
13 | #!/usr/bin/env python |
---|
14 | |
---|
15 | #Tableau definissant la duree des mois dans un calendrier de 365 jours |
---|
16 | tab=[31,28,31,30,31,30,31,31,30,31,30,31] |
---|
17 | |
---|
18 | ################################################################## |
---|
19 | #Fonction qui se charge des mois et jours negatifs ou nul |
---|
20 | ################################################################## |
---|
21 | def pre(y,m,d): |
---|
22 | #print "1",y,m,d |
---|
23 | if m==0: |
---|
24 | return pre(y-1,12,d) |
---|
25 | if m<=0: |
---|
26 | return pre(y-abs((m-1)/12),abs((m-1)%12+1),d) |
---|
27 | if d==0: |
---|
28 | return pre(y,m-1,tab[(m-2)%12]) |
---|
29 | if d<0: |
---|
30 | return pre(y-abs((d-1)/365),m,abs((d-1)%365+1)) |
---|
31 | return date_365d(y,m,d) |
---|
32 | |
---|
33 | ################################################################## |
---|
34 | #Fonction qi renvoit une date valide sur un calendrier de 365 jours |
---|
35 | ################################################################## |
---|
36 | def date_365d(y,m,d): |
---|
37 | #print "2",y,m,d |
---|
38 | mm=m-1 |
---|
39 | if mm/12: |
---|
40 | return date_365d(y+(mm/12),mm%12+1,d) |
---|
41 | if (d-1)/tab[mm]: |
---|
42 | return date_365d(y,m+1,d-tab[mm]) |
---|
43 | return y,m,d |
---|
44 | |
---|
45 | |
---|
46 | |
---|
47 | #print pre(1987,1,365) |
---|
48 | |
---|