● Demander une adresse IP full stack chez Free pour avoir tous les ports
● Réparation d'un radio réveil impossible à mettre à l'heure et qui affiche 7L7
● Réparation d'une VMC: condensateur HS
● Raspberry Pi en récepteur audio Bluetooth (A2DP audio sink)
● Twitter devient x.com et son logo n'est pas sans rappeler celui x.org
● Enfouissement de pales d'éoliennes: vrai ou faux?
● Mettre à jour Postgresql vers une nouvelle version
● Réduire la taille d'une image de carte SD d'un Raspberry Pi
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[...]
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 [...]
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[...]
Le décollage et le rattrapage du booster vu par les caméras de NASASpaceflight. ▶
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": [...]
Voilà comment a fini le Ship au niveau des Îles Turques-et-Caïques juste à côté de Cuba. Vidéo 1 ▶
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 [...]
Rattrapage du booster réussi!
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.
Merci pour ton retour, je vais faire des recherches dans ce sens.
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 Duree entre les 2 timestamps 0h 0min 6s C:\> |
Merci
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
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.
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 ::::::::::::::::::::::::::::::::::::::
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.