Calcule le décalage horaire en France (+1 en été, +2 en hiver) à partir d'une heure UTC et d'une date.

Fork of FrenchTime by Julien Castello

Revision:
6:803a1cf4eb73
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FrenchTime.h.orig	Wed Nov 23 14:46:23 2016 +0000
@@ -0,0 +1,72 @@
+#ifndef MBED_FRENCH_TIME_H
+#define MBED_FRENCH_TIME_H
+
+#include "mbed.h"
+
+#define UTC_TIME_OFFSET  1
+#define DAYS_IN_MARS  31
+
+
+
+/**
+ * Classe qui permet de calculer l'heure locale en France à partir de l'heure UTC provenant d'un GPS par exemple.
+ * Le passage à l'heure d'été est réalisé le dernier dimanche de mars à 00:00
+ * Le passage à l'heure d'hiver est réalisé le dernier dimanche d'octobre à 00:00
+ */
+class FrenchTime
+{
+
+public:
+
+    /** Mois de l'année */
+    enum month {JANVIER = 1 /**<Le mois de Janvier = 1*/, FEVRIER /**< 2 */, MARS /**< 3 */, AVRIL /**< 4 */, MAI /**< 5 */, JUIN /**< 6 */, JUILLET /**< 7 */, AOUT /**< 8 */, SEPTEMBRE /**< 9 */, OCTOBRE /**< 10 */, NOVEMBRE /**< 11 */, DECEMBRE /**< 12 */ };
+
+    /** Jours de la semaine */
+    enum dayOfWeek {DIM = 0 /**<Dimanche = 0 */, LUN /**< 1 */, MAR /**< 2 */, MER /**< 3 */, JEU /**< 4 */, VEN /**< .5 */, SAM /**<Samedi = 6 */ };
+
+
+    /**
+     * Methode qui revoie le décalage horaire de l'heure francaise par rapport à l'heure UTC
+     * @param day date du jour
+     * @param month mois
+     * @param year année
+     * @returns
+     *  uint8_t 1 (hiver)
+     *  uint8_t 2 (été)
+     *
+     * @code
+     *  int DecalageHoraire = FrenchTime::frenchTimeOffset(29,10,2016); //return 1
+     *  int DecalageHoraire = FrenchTime::frenchTimeOffset(30,10,2016); //return 2 
+     * @endcode
+     */
+    static uint8_t frenchTimeOffset(uint8_t day, uint8_t month, int year);
+
+
+    /**
+     * Methode qui renvoie la date du dernier dimanche d'un mois
+     * @param month mois
+     * @param year année
+     * @return uin8_t jour du mois de 1 à 31
+     *
+     * @code
+     *  int dateDuDernierDimancheDuMois = FrenchTime::lastSundayOfMonth(5,2016); //return 29
+     * @endcode
+     */
+    static uint8_t lastSundayOfMonth(uint8_t month, int year);
+
+
+    /**
+     * Methode qui renvoie le jour de la semaine correspondant à une date
+     * @param day date du jour
+     * @param month mois
+     * @param year année
+     * @return uin8_t jour de la semaine de 0(dimanche) à 6(samedi)
+     *
+     * @code
+     *  int jour = FrenchTime::dayOfWeek(22,6,2016); //return 3
+     * @endcode
+     */
+    static uint8_t dayOfWeek(uint8_t day, uint8_t month, int year);
+};
+
+#endif