Blog de Jesus Forain Blog de Jesus Forain
Blog personnel de Jesus Forain où les principaux sujets sont l'informatique, la technologie, le spatial mais aussi divers sujets.
Site hébergé sur un Raspberry PI 4 avec une connexion ADSL infos ici
Rechercher & filtrer
Filtrer par année / mois
Derniers commentaires
Création d'un serveur NTP de strate 1 (GPS)
Fred (non inscrit)
mercredi 17 avril 2024 17:08

Bonjour, tuto très clair est précis ! Le module GPS marche parfaitement suite aux indications de mises en œuvre.Merci beaucoup !

Appairer un Freeplug avec un boîtier CPL d'une autre marque
__invité__
jeudi 4 avril 2024 15:53

Merci encore !Il semble donc que le wifi envoyé dans le réseau électrique par la Freeplug émettrice fonctionne bien vers la prise CPL du salon.Comme je vous l'ai écrit, il est émis sous le sigle Netgear et je ne sais pas le changer pour le mettre sous l'intitulé Free.Cordialement

Appairer un Freeplug avec un boîtier CPL d'une autre marque
avatar de Jesus Forain
Jesus Forain
mardi 26 mars 2024 19:44

J'ai regardé les spécifications du CPL Netgear XWNB5201 et c'est un CPL avec point d'accès WIFI. Le CPL des freeplugs est standard (norme AV200) et compatible avec les autres CPL du marché. Il faut appairer le CPL Netgear avec les freeplugs.Le plus simple est de brancher les 2 freeplugs et le CPL Ne[...]

Appairer un Freeplug avec un boîtier CPL d'une autre marque
__invité__
mardi 26 mars 2024 16:25

Bonjour et merci pour votre réponse !Pas facile d'expliquer clairement par écrit.Avant j'étais chez SFR et j'avais deux prises CPL 500 Netgear.Maintenant, je suis passé chez Free et du coup, ils m'ont posé deux Freeplugs. Par contre le Freeplug récepteur n'émet pas de Wifi contrairement à la CPL Net[...]

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 23:43

Le décollage du Starship vu sous plusieurs angles par les équipes de NASASpaceflight. On voit bien les ondes de choc au moment de l'allumage des moteurs. Dans les heures et jours qui suivent, on devrai voir diverses vidéos du Starship apparaître sur YouTube. Et je me demande si quelqu'un a réussi à [...]

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 15:31

Images de la rentrée atmosphérique, le Starship a été perdu durant cette phase. Ça aura encore été un vol incroyable avec toujours de gros progrès par rapport aux vols précédents.  

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 15:01

En attendant que le Starship revienne sur Terre, tu peux écouter ça pour patienter, mais trouveras-tu la référence?   ▶  

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 14:36

Magnifique! 

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 13:54

Le direct de SpaceX est commencé sur X → lienLes réservoirs sont en cours de remplissage.

Starship: décollage prévu le 14 mars (ou après)
avatar de Jesus Forain
Jesus Forain
jeudi 14 mars 2024 13:26

GO pour le remplissage des réservoirs, décollage encore repoussé à 14h25.

Batch Windows: calculer le temps écoulé entre 2 dates

- 621 vues

Le batch Windows, encore appelé DOS, ne permet pas de calculer facilement la durée écoulée entre 2 dates, surtout si l'on est à cheval sur 2 jours ou 2 mois, par exemple entre le 31 octobre à 23:47 et le 1er novembre à 01:24, les fonctions étant limitées par rapport aux shells Linux.

Le timestamp n'étant pas disponible sous le shell, il faut utiliser un autre script pour le récupérer. Cet autre script est en VisualBasic et contient juste une ligne permettant de récupérer le nombre de secondes écoulées depuis le 1er janvier 1970, c'est le timestamp UNIX.

Le script VisualBasic

Crée un nouveau fichier texte, renomme-le en “timestamp.vbs” et mets ça dedans:

WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now())

On peut ensuite faire les calculs dans un script shell Windows comme dans ce fichier exemple. Attention à bien indiquer le chemin du script timestamp.vbs, ici il faut le mettre le script shell et le VBS dans le même dossier.

J'ai appelé ce script testDateDiff.cmd

@echo off

call:getTimestamp tme1

pause

call:getTimestamp tme2

echo.Timestamp au moment de l'execution        %tme1%
echo.Timestamp au moment de l'appui sur entree %tme2%

call:showDuration %tme1% %tme2%

exit /b

:: Récupération du timestamp, passer la variable en argument
:: Le script contient juste cette ligne
::     WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now())
:getTimestamp
    for /f "delims=" %%x in ('cscript /nologo timestamp.vbs') do set %1=%%x
goto:eof

:: Affiche la durée entre 2 dates
:: Les dates doivent être au format timestamp unix
:showDuration
    :: Calcul de la différence
    set /a dateDiff=%2-%1
    
    :: Jours
    set /a jj=dateDiff/86400
    
    :: Heures
    set /a hh=(dateDiff/3600)-(jj*24)
    
    :: Minutes
    set /a mm=(dateDiff/60)-(hh*60)-(jj*1440)
    
    :: Secondes
    set /a ss=dateDiff-(hh*3600)-(mm*60)-(jj*86400)
    
    :: On affiche les jours seulement s'ils ne sont pas à zéro
    if %jj% neq 0 goto dispDays
    
    echo.
    
    :: Affichage sans les jours
    echo.Duree entre les 2 timestamps %hh%h %mm%min %ss%s
    goto:eof
    
    :: Affichage avec les jours
    :dispDays
    echo.Duree entre les 2 timestamps %jj%j %hh%h %mm%min %ss%s
goto:eof

Le résultat de l'exécution du script

C:\>testDateDiff.cmd
Appuyez sur une touche pour continuer...
Timestamp au moment de l'execution           1415214976
Timestamp au moment de l'appui sur entree 1415214982

Duree entre les 2 timestamps 0h 0min 6s

C:\>

partager sur Facebook
COMMENTAIRES
Nour (non inscrit)
jeudi 16 mars 2023 15:05

Merci

Nour (non inscrit)
jeudi 16 mars 2023 17:35

Bonjour,
J'aime bien votre scripte, il m'a aider à comprendre le temp en timestamp, en tout cas merci ça m’a permis de calculer le temps d'expiration d'un fichier (  lifetime ).
En partant de ton script j'ai pu en faire un nouveau de ma manière pour calculer le timestamp en cours en dos c'est possible : 

::::::::::::::::::: TIMESTAMPS NOW ::::::::::::::::::::::::::::::::::::::

@echo off
:DEBUT
@cls
for /f " tokens=1-3 delims=/" %%i in ('@echo %date%') do (

set DD=%%i
set MM=%%j
set YY=%%k

set DDD=%%i
set MMM=%%j
set YYY=%%k

)

for /f " tokens=1-3 delims=: " %%a in ('@echo %time%') do (

set HH=%%a
set MN=%%b
set SS=%%c

set HHH=%%a
set MNN=%%b
set SSS=%%c

)

:: 12 (années bissextiles) jours
:: Tout est calculé en secondes depuis 01/01/1970 00:00
set /a YY=(((YY-1970)*365)+12)*86400
set /a MM=(MM-1)*30*86400
set /a DD=(DD-1)*86400
set /a HH=HH*60*60
set /a MN=MN*60
SET /A TimestampNOW=YY+MM+DD+HH+MN+SS
@ECHO.
@ECHO. Timestamp : %TimestampNOW%  %DDD%/%MMM%/%YYY%  %HHH%:%MNN%:%SSS%
@ECHO.
pause
GOTO DEBUT
:::::::::::::::::::: END TIMESTAMPS NOW ::::::::::::::::::::::::::::::::::::::

Bien cordialement
Nour

Avatar de Jesus Forain
vendredi 17 mars 2023 10:49

J'avais déjà essayé d'écrire un code pour convertir les timestamps Unix mais c'est bien plus compliqué que ça et j'avais abandonné, préférant utiliser les fonctions système.

Dans ton script, je voit déjà un problème car les années bissextiles sont en dur, ce qui rend le programme obsolète dans le futur. D'ailleurs les années bissextiles se calculent, voir sur Wikipédia, premier paragraphe de l'article.

Ensuite il y a les secondes intercalaires, ce sont des secondes ajoutés aléatoirement pour maintenir le temps UTC synchronisé avec la rotation de la Terre.

Garder les horloges et les calendriers synchronisés est quelque chose de complexe, j'en ai parlé ici.

Nour (non inscrit)
dimanche 19 mars 2023 11:13

Bonjour,

Merci d’avoir répondu à mon message ça m’a permis de corriger le script et mieux comprendre le calcul du timestamp :

A la base j’étais intéressé pour calculer une période ou le temps d’expiration d’un fichier et je me suis retrouver à essayer de comprendre le TIMESTAMP (le temps en cours en secondes) voici la dernière version sachant le calcule n'est plus bon ( bug ) si je teste une année depuis 2038 mais mon scripte devrait être correct.
Merci 
Bien cordialement.
Ci-dessous le script :

rem ::::::::::::::::::: TIMESTAMPS NOW ::::::::::::::::::::::::::::::::::::::
:DEBUT
echo off

@cls


for /f " tokens=1-3 delims=/" %%i in ('echo %date%') do (

@set DD=%%i
@set MM=%%j
@set YY=%%k

@set DDD=%%i
@set MMM=%%j

 

)
rem echo %YY% %MM% %DD%

rem calcule mois en cours
@set /a MM=(MM-1)
rem JANVIER 31
IF %MM% EQU 1 SET MM=31
rem FÉVRIER 28
IF %MM% EQU 2 SET /A MM=31+28
rem MARS 31
IF %MM% EQU 3 SET /A MM=31+28+31
rem AVRIL     30
IF %MM% EQU 4 SET /A MM=31+28+31+30
rem MAI     31
IF %MM% EQU 5 SET /A MM=31+28+31+30+31
rem JUIN     30
IF %MM% EQU 6 SET /A MM=31+28+31+30+31+30
rem JUILLET 31
IF %MM% EQU 7 SET /A MM=31+28+31+30+31+30+31
rem AOÛT     31
IF %MM% EQU 8 SET /A MM=31+28+31+30+31+30+31+31
rem SEPTEMBRE     30
IF %MM% EQU 9 SET /A MM=31+28+31+30+31+30+31+31+30
rem OCTOBRE     31
IF %MM% EQU 10 SET /A MM=31+28+31+30+31+30+31+31+30+31
rem NOVEMBRE     30
IF %MM% EQU 11 SET /A MM=31+28+31+30+31+30+31+31+30+31+30
rem DÉCEMBRE     31
IF %MM% EQU 12 SET /A MM=31+28+31+30+31+30+31+31+30+31+30+31


@echo. 
@echo. Tester le temps dans une annee 
@echo.
@echo. la date et l'heure sont d'aujourd'hui
@echo.
@echo. bug a partir de l'an 2038
@echo.
SET /P YY=Enter une annee :

@set YYY=%YY%

for /f " tokens=1-3 delims=: " %%a in ('echo %time%') do (

@set HH=%%a
@set MN=%%b
@set SS=%%c


@set HHH=%%a
@set MNN=%%b
@set SSS=%%c


)
rem @set SS=%%c
rem echo %HH% %MN% %SS%
rem (années bissextiles) jours étant donné que la 1ere année 1972 bissextiles depuis 1970
rem et une année bissextiles arrive tout les 4 ans pour avoir la 1ere annee depuis 1970 dans le calcule donc : année en cours divisé (-) 1968 (/) 4 et 1972 devient la 1ere année bissextiles
@set /a BISSEXTILES=(YY-1968)/4
rem @echo bissextiles %bissextiles%

rem calcule le nombre d'annee depuis 1970*365+BISSEXTILES* LE NB de seconde dans la journée 86400
@set /a YY=(((YY-1970)*365)+BISSEXTILES)*86400
rem @set /a YY=(YY-1970)*365*86400

rem les mois en ss annee en cours
@set /a MM=MM*86400
rem les jours en ss annee en cours
@set /a DD=(DD-1)*86400
rem les heur en ss jour en cours
@set /a HH=HH*60*60
rem les minules en ss jour en cours
@set /a MN=MN*60

@set /A TimestampNOW=YY+MM+DD+HH+MN+SS


@ECHO.
@ECHO. NOMBRE ANNEEE BISSEXTILES DEPUIS 1970 : %BISSEXTILES%
@ECHO.
@ECHO. Timestamp : %TimestampNOW%  %DDD%/%MMM%/%YYY%  %HHH%:%MNN%:%SSS%
@ECHO.
pause
GOTO DEBUT
rem :::::::::::::::::::: END TIMESTAMPS NOW ::::::::::::::::::::::::::::::::::::::

 

Avatar de Jesus Forain
mardi 4 avril 2023 16:47

J'ai testé le script, ça a l'air de fonctionner. Le dernier détail est que le timestamp est en UTC, il faut encore ajuster avec le fuseau horaire de l'utilisateur sans oublier si l'on est en heure d'été ou d'hiver! Mais à l'origine, j'étais parti dans ce calcul de différence de dates pour avoir le temps que mettait un programme à s'exécuter donc, ça ne gêne pas pour cette utilisation.

Pour le problème des dates après 2038, c'est normal c'est le bug de l'an 2038. Bien moins connu que celui de l'an 2000, ce bug risque d'être bien plus problématique car pouvant affecter beaucoup plus de matériel et logiciels. Le problème viens simplement du fait que le timestamp UNIX est un entier signé de 32 bits, arrivé le mardi 19 janvier 2038 à 3h14 8s (UTC+0) le timestamp deviendra négatif et correspondra au 13 décembre 1901 à 20h45 52s. Les systèmes 64bits ne seront pas affectés mais il est fort probable qu'il existe encore de vieux systèmes 32bits sans correctif en 2038.

J'ai fait l'essai sur un Raspberry 1 (32bits), il deviens inutilisable! L'horloge passe du 19/01/2038 04:14:07 au 01/01/1970 01:00:00 et ne s'incrémente plus; quand on crée un fichier sa date est le 13/12/1901 et plus gênant, impossible de se connecter et en SSH et le CPU est occupé à 100%.

Article sur le bug de l'an 2038.

Envoyer un commentaire
chargement de l'éditeur en cours...
Envoi d'images
Cliquez sur le bouton "insérer l'image" pour l'ajouter à votre message, le fond de l'image passe en vert indiquant qu'elle est ajoutée. Les images non insérés sont supprimées.

Envoi de fichiers

Attention! vous n'êtes pas connecté, vous postez en mode invité.