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 auto-hébergé sur un mini PC avec une connexion fibre
Rechercher & filtrer
Filtrer par année / mois
Derniers commentaires
Raspberry Pi en récepteur audio Bluetooth (A2DP audio sink)
Avatar par défaut
Gregouille (non inscrit)
dimanche 26 janvier 2025 13:46

Bonjour! J'ai enfin réussi ! Le problème résidait dans bluez, malgré les multiples distros que j'ai testé j'avais toujours un conflit quelque part, et là après une énième réinstalle propre et de longues recherches sur toutes les l[...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
Avatar de Jesus Forain
Jesus Forain
samedi 25 janvier 2025 11:14

Le problème doit venir du réseau Free. Si c'était le VPN de l'entreprise ça ne fonctionnerait pas quelque soit le fournisseur. Et l'IP partagée n'empêche pas l'utilisation d'un VPN, c'est surtout utile si comme moi tu héberges un serveur web et que tu [...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
Avatar par défaut
Steph (non inscrit)
jeudi 23 janvier 2025 12:21

Bonjour, Merci pour ton blog et toutes ces infos. J'ai un soucis un peu tricky. Depuis quelques semaines (impossible de me rappeler quand exactement), lorsque je suis en télétravail via le VPN de mon entreprise (via ma freebox pop), j'ai des erreurs reseau (fermeture de socket) entre l[...]

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
lundi 20 janvier 2025 17:38

Le décollage et le rattrapage du booster vu par les caméras de NASASpaceflight.   ▶  

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
vendredi 17 janvier 2025 18:15

D'après un tweet d'Elon Musk, l'explosion serait due à une fuite d'oxygène ou de carburant au dessus du pare-feu d'un des moteurs. Cette fuite trop importante a causée une surpression et serait la cause de l'explosion. Le moment exact de l'explosion à 3'11": [...]

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
vendredi 17 janvier 2025 00:36

Voilà comment a fini le Ship au niveau des Îles Turques-et-Caïques juste à côté de Cuba. Vidéo 1   ▶  

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
vendredi 17 janvier 2025 00:08

Malheureusement, juste après le rattrapage du booster et ce grand moment d'émotions, le Starship a été perdu. C'était le premier vol de la version 2, on devrait en apprendre davantage dans les prochains jours sur ce qu'il s'est passé. Il ne faut pas oublier [...]

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
jeudi 16 janvier 2025 23:45

Rattrapage du booster réussi!

Starship flight 7
Avatar de Jesus Forain
Jesus Forain
jeudi 16 janvier 2025 20:48

C'est confirmé, un petit avion de la NASA est en vol depuis quelques instants au large de l'Australie pour suivre la rentrée atmosphérique du Starship. Lien de suivi sur Flightradar 24.  

Raspberry Pi en récepteur audio Bluetooth (A2DP audio sink)
Avatar par défaut
Gregouille (non inscrit)
mercredi 8 janvier 2025 17:06

Merci pour ton retour, je vais faire des recherches dans ce sens. 

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

- 866 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
Avatar par défaut
Nour (non inscrit)
jeudi 16 mars 2023 15:05

Merci

Avatar par défaut
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

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.

Avatar par défaut
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 ::::::::::::::::::::::::::::::::::::::

 

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 pour les insérer dans le message
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 pour les télécharger

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