web-dev-qa-db-fra.com

Obtenez le temps UTC en secondes

Il semble que je ne parvienne pas à obtenir la date bash UTC en seconde. Je suis à Sydney donc + 10heures UTC

 date
 Thu Jul 3 17:28:19 WST 2014

 date -u
 Thu Jul 3 07:28:20 UTC 2014

Mais quand j'ai essayé de le convertir, j'obtiens le même résultat, qui n'est pas l'heure UTC

 date +%s
 1404372514

 date -u +%s
 1404372515

Qu'est-ce que j'oublie ici?


Après avoir obtenu une réponse disant que date +%s Renvoyait l'heure UTC, voici plus de détails sur le problème auquel je suis confronté.

J'essaie de comparer une date écrite dans un fichier avec Python. Cette date est écrite en secondes en heure UTC. Et le bash date +%s Ne me donne pas le même. En fait, si je fais dans python time.asctime(time.localtime(date_in_seconds_from_bash))] _, je reçois l'heure actuelle de Sydney, pas l'heure UTC. Je ne comprends pas.

43
Romanzo Criminale

Je crois +%s est en secondes depuis Epoch. C'est invariant de fuseau horaire.

21
JamesNoonan33

Je parie que c'est ce qui était prévu comme résultat.

$ date -u --date=@1404372514
Thu Jul  3 07:28:34 UTC 2014
13
Derek Boonstra

Vous dites que vous utilisez:

time.asctime(time.localtime(date_in_seconds_from_bash))

date_in_seconds_from_bash est vraisemblablement la sortie de date +%s.

La fonction time.localtime, Comme son nom l'indique, vous donne l'heure locale .

Si vous voulez UTC, utilisez time.gmtime() plutôt que time.localtime().

Comme La réponse de JamesNoonan dit, le résultat de date +%s Est invariant du fuseau horaire, de sorte que date +%s Est exactement équivalent à date -u %s. Il imprime le nombre de secondes depuis "l’époque", qui est 1970-01-01 00:00:00 UTC. Le résultat que vous montrez dans votre question est tout à fait conforme à cela:

date -u
Thu Jul 3 07:28:20 UTC 2014

date +%s
1404372514   # 14 seconds after "date -u" command

date -u +%s
1404372515   # 15 seconds after "date -u" command
7
Keith Thompson

On pourrait envisager d’ajouter cette ligne à ~/.bash_profile (ou similaire ) afin d’obtenir rapidement l’UTC actuel à la fois comme heure actuelle et en secondes depuis l’époque.

alias utc='date -u && date -u +%s'

2
Adam