tag:linuxfr.org,2005:/users/zerbro81LinuxFr.org : les contenus de zerbro812019-03-19T12:12:27+01:00/favicon.pngtag:linuxfr.org,2005:Diary/383912019-03-08T14:31:00+01:002019-03-09T10:10:50+01:00heure hiver vs heure d'été: quelle durée d'exposition à la lumière du jour ?Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Après de longues années d'absence (environ 15 ans !), je me recrée un compte. Je continuais à venir plus ou moins régulièrement, histoire de voir.</p>
<p>Voilà un premier journal qui revient sur l'heure d'été ou d'hiver. Non pas pour donner mon avis (même si au final, je le donne), mais pour partager un bout de code qui calcule la durée totale d'exposition au soleil (ou plutôt, à la lumière du jour) pendant une année.</p>
<p>Le code est en python. je n'avais jamais rien programmé, ou presque, en python avant. J'ai repris du code à droite à gauche pour utiliser correctement astral et datetime.</p>
<p>Le calcul se fait en fonction de :</p>
<ul>
<li>la ville (qui doit être listée dans astral: <a href="https://astral.readthedocs.io/en/latest/">https://astral.readthedocs.io/en/latest/</a>)</li>
<li>le choix d'un changement d'heure ou pas (chgt_heure)</li>
<li>si pas de changement d'heure: choix du décalage avec UTC (UTC_shift)</li>
<li>son heure de lever (my_rise)</li>
<li>son heure de coucher (my_set)</li>
</ul>
<p>J'ai fait ce bout de code car je ne supporte pas d'entendre des "experts" me dire ce qui est le mieux ou pas, que ceux qui préfèrent l'heure d'été sont des idiots qui n'ont rien compris. Avec des arguments du type "notre horloge biologique est calquée sur le soleil, donc UTC+1 c'est mieux". Certe. Sauf que mes contraintes horaires sont les mêmes toutes l'année. Et que le rythme circadien profond est de 25h et non de 24h…</p>
<p>Mon critère (discutable) est la durée d'exposition à la lumière naturelle. Le programme me permet donc de répondre en fonction de ce critère.</p>
<p>Par défaut, j'ai mis les heures de lever et coucher des enfants. Sachant que le programme ne permet pas de varier en fonction de la semaine, du week end et des vacances.</p>
<p>Pour ceux qui veulent savoir sans lancer le programme, on gagne 8 jours d'exposition à la lumière naturelle avec UTC+2 ou le changement d'heure par rapport à UTC+1</p>
<p>Voici le bout de code:</p>
<pre><code class="python"> <span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">date</span>
<span class="kn">from</span> <span class="nn">astral</span> <span class="kn">import</span> <span class="n">Astral</span>
<span class="n">city_name</span> <span class="o">=</span> <span class="s1">'Paris'</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">Astral</span><span class="p">()</span>
<span class="n">a</span><span class="o">.</span><span class="n">solar_depression</span> <span class="o">=</span> <span class="s1">'civil'</span>
<span class="n">city</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">city_name</span><span class="p">]</span>
<span class="n">chgt_heure</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">UTC_shift</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">chgt_heure</span><span class="p">:</span> <span class="n">UTC_shift</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">year</span> <span class="o">=</span> <span class="mi">2018</span>
<span class="n">my_rise</span> <span class="o">=</span> <span class="mi">7</span> <span class="o">-</span> <span class="n">UTC_shift</span>
<span class="n">my_set</span> <span class="o">=</span> <span class="mi">21</span> <span class="o">-</span> <span class="n">UTC_shift</span>
<span class="k">def</span> <span class="nf">daterange</span><span class="p">(</span><span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span> <span class="p">((</span><span class="n">end_date</span> <span class="o">-</span> <span class="n">start_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span><span class="p">)):</span>
<span class="k">yield</span> <span class="n">start_date</span> <span class="o">+</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="n">start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
<span class="n">end_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">year</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
<span class="n">total</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">seconds</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">microseconds</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">single_date</span> <span class="ow">in</span> <span class="n">daterange</span><span class="p">(</span><span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span>
<span class="n">sun</span> <span class="o">=</span> <span class="n">city</span><span class="o">.</span><span class="n">sun</span><span class="p">(</span><span class="n">date</span><span class="o">=</span><span class="n">single_date</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="n">chgt_heure</span><span class="p">)</span>
<span class="n">my_sunRise</span> <span class="o">=</span> <span class="n">sun</span><span class="p">[</span><span class="s1">'sunrise'</span><span class="p">]</span>
<span class="k">if</span> <span class="n">my_sunRise</span><span class="o">.</span><span class="n">hour</span> <span class="o"><</span> <span class="n">my_rise</span><span class="p">:</span> <span class="n">my_sunRise</span> <span class="o">=</span> <span class="n">my_sunRise</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">hour</span><span class="o">=</span><span class="n">my_rise</span><span class="p">)</span>
<span class="n">my_sunSet</span> <span class="o">=</span> <span class="n">sun</span><span class="p">[</span><span class="s1">'sunset'</span><span class="p">]</span>
<span class="k">if</span> <span class="n">my_sunSet</span><span class="o">.</span><span class="n">hour</span> <span class="o">></span> <span class="n">my_set</span><span class="p">:</span> <span class="n">my_sunSet</span> <span class="o">=</span> <span class="n">my_sunSet</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">hour</span><span class="o">=</span><span class="n">my_set</span><span class="p">)</span>
<span class="n">td</span> <span class="o">=</span> <span class="n">my_sunSet</span> <span class="o">-</span> <span class="n">my_sunRise</span>
<span class="n">total</span> <span class="o">=</span> <span class="n">total</span><span class="o">+</span><span class="n">td</span>
<span class="n">days</span><span class="p">,</span> <span class="n">hours</span><span class="p">,</span> <span class="n">minutes</span> <span class="o">=</span> <span class="n">total</span><span class="o">.</span><span class="n">days</span><span class="p">,</span> <span class="n">total</span><span class="o">.</span><span class="n">seconds</span> <span class="o">//</span> <span class="mi">3600</span><span class="p">,</span> <span class="n">total</span><span class="o">.</span><span class="n">seconds</span> <span class="o">//</span> <span class="mi">60</span> <span class="o">%</span> <span class="mi">60</span>
<span class="k">print</span><span class="p">(</span><span class="n">days</span><span class="p">,</span> <span class="s1">' days, '</span><span class="p">,</span> <span class="n">hours</span><span class="p">,</span> <span class="s1">' hours and '</span><span class="p">,</span> <span class="n">minutes</span> <span class="p">,</span><span class="s1">'minutes of sun'</span><span class="p">)</span></code></pre>
<div><a href="https://linuxfr.org/users/zerbro81/journaux/heure-hiver-vs-heure-d-ete-quelle-duree-d-exposition-a-la-lumiere-du-jour.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/116629/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/zerbro81/journaux/heure-hiver-vs-heure-d-ete-quelle-duree-d-exposition-a-la-lumiere-du-jour#comments">ouvrir dans le navigateur</a>
</p>
zerbro81https://linuxfr.org/nodes/116629/comments.atom