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 catégorie : Programmation
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
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
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
NodeJS – main() // C-Style
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 33 34 35 36 37 38 39 40 |
/* main - C-Style ============== */ //------------------------------------------------------------------------------ var Fiber = require('fibers'); //------------------------------------------------------------------------------ function msleep( msecs ) { var fiber_current = Fiber.current; setTimeout( function(){fiber_current.run()}, msecs ); Fiber.yield(); } //------------------------------------------------------------------------------ // int main( int argc, char *argv[] ) function main( argc, argv ) { // return exit code console.log( argc, argv ); console.log( 'sleep 1s' ); msleep( 1000 ); console.log( 'exit' ); return 0; } //------------------------------------------------------------------------------ Fiber(function(){ process.exit( main( process.argv.length-1, process.argv.slice(1) ) ); }).run(); |
Exemple main() // C-Style: main.js
Excel – CSV et DateTime
Résumé des caractéristiques de la conversion automatique d’un champ DateTime à l’ouverture :
- Le codage interne de la date Excel est un nombre réel dont l’unité est le jour et les fractions des heures, minutes, secondes, etc…
- La référence ‘0’ est le 1er janvier 1900.
- Le formatage Excel de DateTime 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.
- Excel effectue une conversion automatique des données lors de l’importation CSV. La conversion des champs de donnée DateTime est restreinte au format ‘aaaa-mm-jj hh:mm:ss’. Les informations supplémentaires de millisecondes ou de TimeZone sont éliminées.
- Afin que l’information de temps universelle UTC puisse être déterminée avec exactitude, le fichier CSV doit contenir 3 champs qui sont ensuite combinés par une formule:
- DateTime au format ‘aaaa-mm-jj hh:mm:ss’ (date et heure locales)
- MSecs au format ‘nombre entier’ (0..999 [millisecondes])
- TimeZone au format ‘nombre entier signé’ (+/- n [minutes])
Le temps UTC est calculé ainsi: DateTime + Msecs/24/60/60/1000 + TimeZone/24/60.
Exemple de fichier CSV avec une date et heure locale 11.12.2013 17h11m22.345s dans le fuseau horaire de Paris +1h (heure d’hiver):
1 2 3 |
DateTime;MSecs;TimeZone;... 2013-12-11 17:11:22;345;+60;... ... |
Encodage DateTime ISO 8601:
1 |
2013-12-11T17:11:22.345+01:00 |
Feuille Excel d’étude DateTime: DateTime.xlsm
Format DateTime ISO 8601 simplifié: ECMAScript® Date Time String Format
NodeJS – include()
1 2 3 4 5 6 7 |
var fs = require("fs"); function read(f){return fs.readFileSync(f).toString()}; function include(f){eval.apply(global,[read(f)])}; ... include( 'mon_script.js' ); |