gcal : Éphémérides solaires
De nombreux sites existent permettant de trouver les heures de lever et de coucher du soleil. De même en cherchant 30s on trouve très facilement les calculs nous permettant de ré-implémenter l'algorithme. Mais plutôt que de réinventer la roue, nous allons utiliser le méconnu gcal pour trouver les heures cherchées. En fait, gcal n'est pas si méconnu que cela, mais on s'arrête souvent à sa 1ère fonction : afficher un calendrier.
$ gcal Décembre 2009 Lundi 7 14 21 28 Mardi 1 8 15 22 29 Mercredi 2 9 16 23 30 Jeudi 3 10 17 24 31 Vendredi 4 11 18 25 Samedi 5 12 19 26 Dimanche 6 13 20 27
Voir pour les plus courageux, calculer les jours de fête de l'an prochain :
$ gcal -qfr --holiday-list 2010 ... Liste permanente des jours de fête: L'année 2010 N'EST PAS une année bissextile. Jour de l'An (FR) + Ve, 1 Jan 2010 Quinquagesima Sunday (FR) - Di, 14 Fé 2010 Vendredi Saint (FR) * Ve, 2 Avr 2010 Dimanche de Pâques (FR) + Di, 4 Avr 2010 Lundi de Pâques (FR) + Lu, 5 Avr 2010 Fête du Travail (FR) + Sa, 1 May 2010 Jour de la Victoire (FR) + Sa, 8 May 2010 Ascension du Christ (FR) + Je, 13 May 2010 Dimanche de la Pentecôte (FR) + Di, 23 May 2010 Lundi de la Pentecôte (FR) + Lu, 24 May 2010 Fête Nationale (FR) + Me, 14 Jui 2010 Ascension de la Vierge (FR) + Di, 15 Août 2010 Toussaint (FR) + Lu, 1 Nov 2010 Jour de l'Armistice (FR) + Je, 11 Nov 2010 Veille de Noël (FR) - Ve, 24 Dé 2010 Fête de Noël (FR) + Sa, 25 Dé 2010 Boxing Day (FR) * Di, 26 Dé 2010 Sylvester/New Year's Eve (FR) - Ve, 31 Dé 2010
Or il est bien encore plus puissant que cela ! La preuve ? a quelle heure se couche le soleil à Paris aujourd'hui ?
$ gcal -c -#'0*d1#999_%s4+485124+0022107,+01:' Fixed date list: Je, 3 Dé 2009: 16:53
ne fuyez pas :) nous allons détailler.
- -c : passer en mode date fixe. C'est un mode qui permet d'associer du texte à une date indépendamment de l'année, du mois ... Ces dates/textes sont définies dans des fichiers de ressources avec une syntaxe particulière. Typiquement, le 14 juillet ou un anniversaire seront définit ainsi.
- -# : va nous permettre de définir une date fixe sans passer par un fichier de ressource, mais directement sur la ligne de commande.
- 0*d1#999 : la, c'est la partie peu claire. normalement, ici on définit la date fixe suivant ce format. mais nous sommes dans un cas particulier, nous voulons que cette ligne de texte soit valable pour tous les jours de l'année (le soleil se couche tous les jours ![1]). Pour cela il faut utiliser cette chaine de caractères.
- _ : cet underscore représente un espace séparateur entre la date et le texte associé
-
%s4+485124+0022107,+01: : voici la magie, cette chaine dit à gcal de calculer des données en rapport avec le soleil :
- s : coucher de soleil (o pour le lever)
- 4 : calcul à réaliser. Ici quand le centre du soleil passe à 34'[2] sous l'horizon et disparait. la réfraction est prise en compte.
-
+485124+0022107 : les coordonnées géographiques de Paris au format ISO 6709:1983 (voir aussi) soit :
- +485124 : 48°51'24' N
- +0022107 : 2°21'07'' E[3]
- ,+01: : le décalage horaire par rapport à l'UTC pour l'avoir en heure locale[4]
Et voila ! Vous voyez ce n'est pas si compliqué[5] !
Maintenant, on peut varier un peu les plaisirs :
$ C='+4844-0032715' # Lannion $ TZ=$(date +%:z) $ gcal %20091204 -cQUx -#"0*d1#999_%o4${C},${TZ}__-_%s4${C},${TZ}" 08:51 - 17:17
Demain, à Lannion, le soleil sera visible de 8h51 à 17h17.
Ah oui, les nouvelles options :
- C='+4844-0032715' : une variable qui contient nos coordonnées, j'aime pas écrire deux fois la même chose
- TZ=$(date +%:z) : une variable qui contient le décalage heure locale/UTC soit +01:00. man date pour plus d'infos[6]$
- %20091204 : permet de fixer la date du calcul
- Q : on supprime l'affichage des lignes blanches
- U : on supprime l'affichage de la date
Si l'on continue, on peut avoir les heures de la lune :
$ gcal %20091204 -cQUx -#"0*d1#999_%(4${C},${TZ}__-_%)4${C},${TZ}" 19:38 - 11:07
Les phases de lune
$ gcal %20091225 -cQUx -#"0*d1#999_%Z" --moonimage-lines=10 (je laisse la surprise)
Et plein d'autre choses encore comme --limit, --atmosphere les calculs de distances, de biorythme ...
Pour finir quelques liens :
- la doc très compl
iquéeète - calculer à la main les éphémérides
- Institut de mecanique celeste et de calcul des ephemerides
- une version pour windows
- un calendrier solaire
Notes
[1] on verra les pôles plus tard
[2] des minutes d'arc bien sur !!
[3] Les coordonnées viennent de Wikipedia
[4] heure d'hiver: UTC+1
[5] et puis c'est moi qui ai passé les heures dans la doc pour trouver tous ces détails :)
[6] A noter, --time-offset devrait faire la même chose, mais je n'ai pas réussit, si quelqu'un a une explication ...