GNU/Linux >> Tutoriels Linux >  >> Linux

Comment la date de Coreutil parvient-elle à obtenir des résultats aussi étranges ?

Je jouais avec date pour essayer de convertir des expressions telles que "2 heures" en un nombre de secondes comme 7200. Je pensais pouvoir le faire avec des invocations telles que :

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

Pourtant, j'ai remarqué des résultats extrêmement étranges en le faisant. (Mon /etc/timezone contient "Europe/Paris", d'où l'utilisation de TZ pour forcer les heures UTC.)

omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"             
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s" 
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s" 
-3540

Le premier résultat est assez raisonnable, mais je suis vraiment totalement perplexe sur la façon dont date aurait pu trouver les trois derniers résultats. Est-ce que quelqu'un comprend la logique entre ces résultats ?

Réponse acceptée :

Je pense que ça prend votre + x comme spécificateur de fuseau horaire (par exemple, considérez 2013-04-25 19:52:36 +4 est un horodatage valide, dans un fuseau horaire de 4 heures en avance sur UTC).

Il s'agit alors de voir le mot "minutes" et de le traiter comme un synonyme de minute, ce qui vous donne une minute plus tard.

Si vous mettez un spécificateur de fuseau horaire explicite, cela fonctionne :

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

Notez le UTC après le champ des secondes. Vous pouvez également mettre un second +0 :

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

… mais au moins personnellement, c'est beaucoup plus difficile à lire.

Ou vous pouvez mettre un Z après les secondes, etc. Vous n'avez pas vraiment besoin du TZ variable d'environnement à définir sur UTC dans les exemples ci-dessus.


Linux
  1. Comment obtenir uniquement les fichiers créés après une date avec Ls ?

  2. Comment obtenir l'heure de la date formatée en python

  3. Comment obtenir l'utilisation du processeur

  4. Comment obtenir la date/heure de création du fichier dans Bash/Debian ?

  5. Comment obtenir la date d'expiration du mot de passe utilisateur à partir d'Active Directory ?

Comment obtenir la date et l'heure actuelles en Python

Comment obtenir la date et l'heure actuelles en JavaScript

Comment faire pour que l'horloge affiche la date ?

Comment obtenir ps pour imprimer le groupe?

Comment démarre PulseAudio ?

Comment Linux alloue-t-il la bande passante entre les processus ?