Toutes les autres questions sur le réseau SE traitent de scénarios où soit la date est supposée être now
( Q ), soit où seule une date est spécifiée ( Q ).
Ce que je veux faire, c'est fournir une date et une heure, puis soustraire une heure à cela.
Voici ce que j'ai essayé en premier:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Il en résulte 2018-12-10 06:39:55
- Il a ajouté 7 heures. Puis soustrait 20:05 minutes.
Après avoir lu la page man
et info
de date
, je pensais l'avoir corrigé avec ceci:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Mais, même résultat. D'où vient-il même les 7 heures?
J'ai également essayé d'autres dates parce que je pensais que nous avions peut-être 7200 secondes intercalaires ce jour-là, qui sait lol. Mais mêmes résultats.
Quelques exemples supplémentaires:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Mais ici, cela devient intéressant. Si j'omets le temps en entrée, cela fonctionne très bien:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
Qu'est-ce que je rate?
Mise à jour: j'ai ajouté un Z
à la fin, et cela a changé le comportement:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Je suis toujours confus cependant. Il n'y a pas grand-chose à ce sujet dans la page d'informations GNU sur la date.
Je suppose que c'est un problème de fuseau horaire, mais en citant le calendrier Wiki sur ISO 8601 :
Si aucune information de relation UTC n'est donnée avec une représentation temporelle, l'heure est supposée être en heure locale.
C'est ce que je veux. Mon heure locale est également réglée correctement. Je ne sais pas pourquoi la date dérangerait le fuseau horaire dans ce cas simple de moi fournissant une date et voulant en soustraire quelque chose. Ne devrait-il pas soustraire les heures de la chaîne de date en premier? Même s'il la convertit d'abord en date, puis effectue la soustraction, si je laisse de côté toutes les soustractions, j'obtiens exactement ce que je veux:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Donc , SI c'est vraiment un problème de fuseau horaire, où est - ce que la folie vient?