1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
local socket = require("socket") local udp = socket.udp() local request = string.char( 227, 0, 6, 236, 0,0,0,0,0,0,0,0, 49, 78, 49, 52, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ) -- udp-request local response -- udp-response local uint32_from_bytes = function(bytes) return (((bytes:byte(1)*256 + bytes:byte(2))*256 + bytes:byte(3))*256 + bytes:byte(4)) end udp:settimeout(1) -- timeout 1s udp:setsockname("*",0) --assert(udp:setpeername("192.168.0.254",123)) -- mon routeur privé assert(udp:setpeername("time.windows.com",123)) -- serveur NTP de Windows for i = 1, 3, 1 do -- 3 tentatives de lecture du serveur NTP udp:send(request) response = udp:receive() if response then break end end if not response then print("timeout") else local ntp_timestamp = uint32_from_bytes(response:sub(41,44)) -- NTP-timestamp = seconds since 1.1.1900 local unix_timestamp = ntp_timestamp - 2208988800 -- UNIX-timestamp = seconds since 1.1.1970 print(unix_timestamp) end |
Archives de l’auteur : jmP
Excel – VBA Date
Le type de données VBA Date
Les variables de type Date sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE représentant des dates comprises entre le 1er janvier 100 et le 31 décembre 9999, et des heures allant de 0:00:00 à 23:59:59. Toute valeur de littéral date peut être attribuée à une variable de type Date. Les littéraux date doivent être délimités par le signe #, par exemple #January 1, 1993#
ou #1 Jan 93#
.
Les variables de type Date affichent les dates au format de date abrégé reconnu par votre ordinateur. Les heures s’affichent au format horaire (plage de 12 ou 24 heures) défini dans votre ordinateur.
Lorsque d’autres types de données numériques sont convertis en données de type Date, les valeurs situées à gauche du séparateur décimal représentent la date, tandis que celles situées à droite correspondent à l’heure. Minuit est représenté par 0 et midi par 0,5. Les nombres entiers négatifs représentent des dates antérieures au 30 décembre 1899.
- Le codage interne de la date Excel est un nombre réel double dont l’unité est le jour et les fractions des heures, minutes, secondes, etc…
- La valeur référence
2
correspond au 1er janvier 1900 (voir liens référencés 2 et 3 ci-dessous). Il est souvent mentionné que1
est la valeur de référence mais cela n’est que partiellement exact et ne satisfait qu’Excel et d’anciens logiciels. Cela ne satisfait en aucun cas les interactions avec d’autres logiciels ou références de temps comme EPOCH et d’autres. Ce défaut d’Excel n’a jamais été corrigé et ne le sera probablement jamais (voir lien référencé 2). - Dans la pratique, le calendrier Excel sans erreur comprend les valeurs de date
>=61
(1er mars 1901 00:00:00) et<2958466
(31 décembre 9999 24:00:00).
La fonction VBA Format(expr, format, …)
Renvoie une valeur de type Variant (String) contenant une expression formatée en fonction des instructions contenues dans l’expression de mise en forme.
Syntaxe
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
La syntaxe de la fonction Format comprend les éléments suivants :
Élément | Description |
---|---|
expression | Toute expression valide. |
format | Facultatif. Expression de mise en forme valide, nommée ou définie par l’utilisateur. |
firstdayofweek | Facultatif. Constante indiquant le premier jour de la semaine. |
firstweekofyear | Facultatif. Constante indiquant la première semaine de l’année. |
- La fonction est sans erreur, y compris depuis la valeur de référence
2
(Excel 2010 et probablement toutes les versions). - Le formatage de dates Excel le plus complet est
aaaa-mm-jj hh:mm:ss.000
. - Excel ne prend pas en compte les TimeZone, ni les heures d’été et d’hiver.
- Il est toutefois intéressant de noter que la référence
2
pour la date du1er janvier 1900
autorise le calcul relatif de TimeZone aux limites de+/- 24 heures (1 jour)
. - Les valeurs de dates
>=0
et<1
peuvent être assimilées à des heures>=#00:00:00#
et<#24:00:00#
. - Le formatage pour afficher l’heure est
hh:mm:ss
ouhh:mm:ss.000
ou encore d’autres variantes.
La fonction VBA CDate(expr)
La fonction ci-dessous convertit une expression en un type de données spécifique.
Syntaxe
CDate(expression)
L’argument expression peut être n’importe quelle expression de chaîne ou expression numérique.
Types renvoyés
Le nom de la fonction détermine le type renvoyé, comme le montre le tableau suivant :
Fonction | Type renvoyé | Plage de valeurs de l’argument expression |
---|---|---|
CDate | Date | Toute expression de date valide. |
Utilisez la fonction IsDate pour déterminer si la valeur de l’argument date peut être convertie en date ou en heure. La fonction CDate reconnaît les littéraux date et heure ainsi que certains nombres appartenant à la plage de dates autorisées. Lors de la conversion d’un nombre en date, la partie entière du nombre est convertie en date. Si le nombre comprend une partie décimale, celle-ci est convertie en heures, exprimées en partant de minuit.
La fonction CDate reconnaît les formats de date définis dans les paramètres régionaux de votre système. L’ordre des jours, mois et années risque de ne pouvoir être défini si les données sont fournies dans un format différent des paramètres de date reconnus. En outre, les formats de date complets précisant le jour de la semaine ne sont pas reconnus.
Pour des raisons de compatibilité avec les versions antérieures de Visual Basic, il existe une fonction CVDate, dont la syntaxe est identique à celle de la fonction Cdate. Cependant, la fonction CVDate renvoie une donnée de type Variant et de sous-type Date et non une véritable donnée de type Date. Dans la mesure où il existe désormais un type Date intrinsèque, la fonction CVDate n’est plus nécessaire. On obtient le même résultat en convertissant une expression en donnée de type Date, puis en l’affectant à une donnée de type Variant. Cette technique est cohérente avec la conversion des autres types intrinsèques dans le sous-type Variant équivalent.
- La valeur expression peut satisfaire à de nombreux critères d’analyse (parsing).
- La fonction CDate n’est exacte que pour les dates
>=#1.3.1900#
(1er mars 1900).
Liens externes
- Feuille Excel d’étude DateTime: DateTime_2017-08-02.xlsm
- Confusion Excel pour l’année 1900: Microsoft – Excel suppose à tort que l’année 1900 est une année bissextile
- Différences entre Excel pour Windows ou Macintosh: EPFL – Problème de dates dans Excel danger!
- Calcul des années bissextiles: Vikidia – Année bissextile
- Calcul des années bissextiles: Wikipédia – Année bissextile
- Calcul des années bissextiles: Wikipédia – Année séculaire bissextile
Addendum
2017-12-29: Les fonctions VBA CDate et Format convertissent correctement les dates <#1.3.1900#
. En fait, c’est le formatage des dates affichées dans les cellules du tableur Excel qui est incorrect. La valeur 2 correspond correctement à la date #1.1.1900#
.
Arduino – CPPM Library
Révision du 2015-08-06.
- Ajout d’une trame de sortie CPPM.
- Augmentation de la plage des temps Sync/Pulse/Frame.
- Modification de la pulse de synchronisation sur le flanc descendant.
Cette librairie offre un interface pour décoder la trame d’un signal CPPM délivré par un récepteur R/C comme par exemple le modèle Orange R615X. Continuer la lecture
Atelier DIY – Créer un data-logger domestique
Au terme des 3 sessions, l’utilisateur peut mettre en service le data-logger dans son propre environnement domestique.
Q : Qu’est-ce qu’un data-logger (enregistreur de données) ?
R : C’est un dispositif qui enregistre des données fournies par des capteurs.
FT232R USB UART – Fake and Genuine
Lors d’un dernier atelier DIY que je dirigeais, un participant ne parvenait pas à vérifier la connexion de son Diduino sur un routeur fraîchement flashé avec OpenWrt. En dernière solution, je lui ai échangé son Diduino « tout neuf » contre un de mes « anciens » et cela a solutionné temporairement le problème. De retour en atelier, j’ai entrepris de comprendre ce qui se passait. Continuer la lecture
OpenWrt – Cross-Compilation
Je m’intéresse à écrire un programme de démonstration « Hello world ! » en langage C et à en vérifier l’exécution dans un routeur opérant sous OpenWrt. Les difficultés de l’exercice résident dans la compilation du programme et la liaison avec les librairies OpenWrt car ces opérations ne sont pas réalisables dans le routeur. Elles doivent être réalisées dans un autre ordinateur et le code généré doit être transféré dans le routeur. On parle de Cross-Compilation.
Dans l’article précédent OpenWrt – TP-Link TL-WR710N, j’avais documenté comment installer OpenWrt dans le routeur TP-Link TL-WR710N. Cet article s’appuie sur le même modèle. Continuer la lecture
R/C Remote Shutter
Le R/C Remote Shutter permet de déclencher à distance une caméra (Nikon, Canon, etc…) à l’aide d’une télécommande de modélisme. Il est raccordé sur une voie du récepteur de la télécommande. Lorsqu’il est raccordé sur la manette des gaz (THRO), les fonctions sont les suivantes: Continuer la lecture
R/C Slope – Chasseral
Excellent site de vol dynamique le long de la crête par vent du Nord généralement modéré. Cohabitation occasionnelle avec des parapentistes normalement basé à l’Ouest du grand hôtel. Passages exceptionnels d’avions légers ou de planeurs. Continuer la lecture
OpenWrt – TP-Link TL-WR710N
Site du fabricant: TP-Link TL-WR710N
OpenWrt: TP-Link TL-WR710N – OpenWrt
Ce petit routeur est idéal pour l’intégration dans des projets industriels ou de hobbyistes. Il se prête bien au débridage (unbrick) et à l’installation du logiciel libre OpenWrt. Continuer la lecture
Melexis MLX90614
Sketch Arduino pour lire la température du chip Melexis MLX90616 via le bus i2c (TWI).
Site du fabricant: MX90614
2014-01-27: Ce sketch ne fonctionne pas avec le nouvel Arduino DUE en raison d’un défaut d’implémentation de la librairie Wire.h !!! Continuer la lecture