Convertir un intervalle de temps en secondes au format de temps en shell
J'ai une variable $i qui est secondes dans un script shell, et je suis en train de le convertir en 24 HEURES HH:MM:SS. Est-ce possible dans la coquille?
Vous devez vous connecter pour publier un commentaire.
Un jeu hacky façon de faire exactement ce que vous cherchez =)
Explication:
date
utilitaire vous permet de spécifier un temps, de la corde, en secondes, depuis 1970-01-01 00:00:00 UTC, et de sortie dans le format que vous spécifiez.-u
option pour afficher l'heure UTC, donc il n'a pas de facteur de décalage horaire (depuis l'heure de début de 1970 est en UTC)date
spécifiques (Linux):-d
partie racontedate
pour accepter les informations de temps de chaîne au lieu d'utilisernow
@${i}
partie est de savoir comment vous diredate
que$i
est en secondes+"%T"
est pour le formatage de votre sortie. À partir de laman date
page:%T time; same as %H:%M:%S
. Puisque nous ne se soucient que duHH:MM:SS
partie, cela correspond!i
inférieur 86400s:i=86400; date -u -d @${i} +"%T"
vous donnera00:00:00
"invalid date «@»"
.date -u -d @"$i" +"%T"
date -u -r "$i" +"%T"
$(date -d @${diff} '+%d days %T')
toutefois, Cela renvoie '1 jours 0:01:01" au lieu de "0 jours, 0:01:01" quand diff=61Une autre approche: l'arithmétique
produit
1:53:09
La
-d
argument s'applique à la date decoreutils
(Linux) uniquement.Dans BSD/OS X, utilisez
Voici mon algo/script aides sur mon site:
http://ram.kossboss.com/seconds-to-split-time-convert/
J'ai utilisé ce elogant algo à partir d'ici: Convertir des secondes en heures, minutes, secondes
Exemple de mon deuxième jour, heure, minute, seconde converter:
Si
$i
représente une date dans les deuxième depuis l'Époque, vous pouvez l'afficher avecmais vous semble supposer que
$i
est un intervalle (par exemple, une certaine durée) n'est pas une date, et puis je ne comprends pas ce que vous voulez.J'utilise le C shell, comme ceci:
Continue @Daren réponse, juste pour être clair:
Si vous souhaitez utiliser la conversion de votre fuseau horaire, n'utilisez pas le "u" de l'interrupteur, comme dans:
date -d @$i +%T
ou, dans certains cas,date -d @"$i" +%T
.