Depuis déjà fort longtemps, certaines applications DOS, fournissait la possibilité d'obtenir les phases lunaires lorsqu'on consultait leur calendrier comme en fait fois la capture du MonsterBook :
Pourtant, même s'il ne s'agit que de convertir une date Julienne en Grégorienne pour ensuite calculer à tous les 30 jours (plus exactement 29,53058) la lune revenant inlassablement, les systèmes d'exploitation ne l'indique pas! Vous trouverez la réponse que vous souhaitez, inspiré du code d'Alan Graff, à l'aide du code source Visual Basic .NET (VB .NET) suivant :
- Module Module1
-
- Function MoonPhase(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As Double
- Dim M As Double
- Dim XYear, Century As Integer
- If Month <= 2 Then
- Year -= 1
- Month += 12
- End If
-
- Month -= 3
- XYear = Year Mod 100
- Century = Math.Floor(((Math.Floor(Year / 100) * 146097)) / 4)
- XYear = Math.Floor((XYear * 1461) / 4)
- M = (Math.Floor(((((Month * 153) + 2) / 5) + Day) + 1721119 + XYear + Century) + 4.867) / 29.53058
- MoonPhase = Math.Abs(2 * (M - Math.Floor(M)) - 1)
- End Function
-
- Sub Main()
- Dim I As Integer
- Dim CircleType As Double
- For I = 1 To 31
- CircleType = MoonPhase(1999, 11, I)
- If CircleType > 0.97 Then
- Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune:Pleine lune")
- Else
- If CircleType < 0.03 Then
- Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune:Pas de lune")
- Else
- If (CircleType > 0.46) And (CircleType < 0.53) Then
- Console.WriteLine(CStr(I) & " novembre 1999, Phase de la lune: Quart de lune")
- End If
- End If
- End If
- Next
- For I = 1 To 31
- CircleType = MoonPhase(2007, 8, I)
- If CircleType > 0.97 Then
- Console.WriteLine(CStr(I) & " août 2007, Phase de la lune:Pleine lune")
- Else
- If CircleType < 0.03 Then
- Console.WriteLine(CStr(I) & " août 2007, Phase de la lune:Pas de lune")
- Else
- If (CircleType > 0.46) And (CircleType < 0.53) Then
- Console.WriteLine(CStr(I) & " août 2007, Phase de la lune: Quart de lune")
- End If
- End If
- End If
- Next
- End Sub
-
- End Module
on obtiendra le résultat suivant :
1 novembre 1999, Phase de la lune: Quart de lune8 novembre 1999, Phase de la lune:Pas de lune
15 novembre 1999, Phase de la lune: Quart de lune
23 novembre 1999, Phase de la lune:Pleine lune
30 novembre 1999, Phase de la lune: Quart de lune
6 août 2007, Phase de la lune: Quart de lune
13 août 2007, Phase de la lune:Pas de lune
20 août 2007, Phase de la lune: Quart de lune
28 août 2007, Phase de la lune:Pleine lune
Dernière mise à jour : Samedi, le 22 octobre 2016