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 mini PC KVM avec une connexion ADSL infos ici
Rechercher & filtrer
Filtrer par année / mois
Derniers commentaires
Rencontre Aérotrain du 6 juillet 2024
avatar de Jesus Forain
Jesus Forain
dimanche 21 juillet 2024 23:10

J'ai rien supprimé, toutes les photos en rapport avec l'Aérotrain sont ici dans la galerie photo. Il me reste aussi la vidéo à faire, et je mettrais à jour cet article.

Rencontre Aérotrain du 6 juillet 2024
JCB (non inscrit)
dimanche 21 juillet 2024 20:03

Les photos de la rencontre ont disparues ? Il y en avait beaucoup plus à un moment. Comment les voir ?

Free: le reverse DNS est de nouveau opérationnel
mecamic (non inscrit)
vendredi 19 juillet 2024 12:32

Merci beaucoup pour ce retour. Je vais donc supprimer l'adresse IPV6 pour le serveur de mail.

Free: le reverse DNS est de nouveau opérationnel
avatar de Jesus Forain
Jesus Forain
vendredi 19 juillet 2024 11:44

Bonjour, Le reverse DNS n'est pas disponible pour l'IPv6, peut-être que ça le sera un jour. L'absence de reverse DNS n'est pas un problème, ça n?empêche pas d'héberger un site web. Là où ça peut poser problème c'est pour un serveur de mail, les mails envoyés depuis ce serveur risquent d'être rejetés[...]

Free: le reverse DNS est de nouveau opérationnel
mecamic (non inscrit)
vendredi 19 juillet 2024 11:14

Bonjour, Merci pour vos tutoriels autour de free. Je suis également en train d'essayer d'héberger un site web derrière une freebox. Je viens de régler la mise en place du reverse dns v4. Il reste la mise en place du reverse dns v6. Son paramétrage n'est pas (encore) accessible chez free. Puis-je sav[...]

Raspberry Pi en récepteur audio Bluetooth (A2DP audio sink)
avatar de Jesus Forain
Jesus Forain
mercredi 3 juillet 2024 23:23

Merci à ceux qui apprécient ce tuto. Je l'ai écris pour que ce soit clair et surtout j'y ai mis toutes les commandes, pour faire en sorte que si tu suis le tuto, tu n'a pas à te poser de questions ou aller chercher de l'aide ailleurs. Si tous les développeurs pouvaient faire pareil ça serait super p[...]

Raspberry Pi en récepteur audio Bluetooth (A2DP audio sink)
mabu (non inscrit)
mercredi 3 juillet 2024 09:30

Bonjour,Un grand merci pour ce tuto très bien fait et fonctionnel!Installé sur raspberry PI 0w sous DietPi pour remettre au gout du jour un vieil ampli avec un dac HDMI ? RCA C'est en complément de shareport au cas où le wifi serait ko ou si un invité sans iOS voudrait mettre du son.Ça marche super [...]

Réparation d'une VMC: condensateur HS
Fcna44410 (non inscrit)
jeudi 27 juin 2024 12:53

Merci pour l'info du condensateur j'avais les deux de chaque moteur HS  Ci joint les première manipulation pour savoir par ou commencer  Entre les bornes L1 et N1 puis L2 et N2 (sorties alimentation moteur), il devrait y avoir une tension 230 V. Entre les bornes 0 et REG1 puis 0 et REG2 (régulation [...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
Mat (non inscrit)
jeudi 30 mai 2024 13:13

Merci beaucoup ! 👍

Demander une adresse IP full stack chez Free pour avoir tous les ports
avatar de Jesus Forain
Jesus Forain
mercredi 29 mai 2024 22:43

À l'époque où j'ai écris cet article, il y avait effectivement un problème de réseau chez Free; j'ai trouvé ce bug. À la fin de l'article j'explique un problème de réseau que j'ai rencontré entre une Freebox fibre et ADSL en IPv6 avec un débit réduit mais ça fonctionnait normalement en IPv4.Sur le p[...]

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

- 685 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é.