Ho una variabile di $ i che è secondi in uno script di shell e sto cercando di convertirlo in 24 HOUR HH: MM: SS. E 'possibile in shell?Convertire un intervallo di tempo in secondi per il tempo formattato nella shell
risposta
Ecco un modo hacky divertente da fare esattamente quello che stai cercando =)
date -u -d @${i} +"%T"
Spiegazione:
- L'utilità
date
consente di specificare un tempo, da string, in secondi dal 1970-01-01 alle 00:00:00 UTC e l'output in qualsiasi formato specificato. - L'opzione
-u
è quello di visualizzare l'ora UTC, quindi non tiene conto offset di fuso orario (da tempo dall'inizio del 1970 è in UTC) - Le seguenti parti sono GNU
date
SPECIFICI (Linux):- la parte
-d
dicedate
per accettare le informazioni di tempo da stringa invece di utilizzarenow
- la parte
@${i}
è come dicidate
che$i
è espresso in secondi
- la parte
- Il
+"%T"
è per la formattazione dell'output. Dalla paginaman date
:%T time; same as %H:%M:%S
. Dato che ci interessa solo la parteHH:MM:SS
, questo si adatta!
Se $i
rappresenta una data in seconda dal Epoch, è possibile visualizzare con
date -u -d @$i +%H:%M:%S
ma sembra supporre che $i
è un intervallo di tempo (ad esempio, una certa durata), non una data, e poi ho don capisco cosa vuoi
Stesso (duplicato) come @ sampson-chen con +% T. –
Un altro approccio: l'aritmetica
i=6789
((sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo $timestamp
produce 1:53:09
potrebbe non essere stato quello che OP era dopo, ma era esattamente quello di cui avevo bisogno. Grazie. –
L'argomento -d
vale per la data da coreutils
(Linux) solo.
in BSD/OS X, utilizzare
date -u -r $i +%T
non funziona su AIX :( – zack
Ecco il mio aiutanti algo/script sul mio sito: http://ram.kossboss.com/seconds-to-split-time-convert/ Ho usato questo elogant algo da qui: Convert seconds to hours, minutes, seconds
convertsecs() {
((h=${1}/3600))
((m=(${1}%3600)/60))
((s=${1}%60))
printf "%02d:%02d:%02d\n" $h $m $s
}
TIME1="36"
TIME2="1036"
TIME3="91925"
echo $(convertsecs $TIME1)
echo $(convertsecs $TIME2)
echo $(convertsecs $TIME3)
Esempio di il mio secondo al giorno, ora, minuto, secondo convertitore:
# convert seconds to day-hour:min:sec
convertsecs2dhms() {
((d=${1}/(60*60*24)))
((h=(${1}%(60*60*24))/(60*60)))
((m=(${1}%(60*60))/60))
((s=${1}%60))
printf "%02d-%02d:%02d:%02d\n" $d $h $m $s
# PRETTY OUTPUT: uncomment below printf and comment out above printf if you want prettier output
# printf "%02dd %02dh %02dm %02ds\n" $d $h $m $s
}
# setting test variables: testing some constant variables & evaluated variables
TIME1="36"
TIME2="1036"
TIME3="91925"
# one way to output results
((TIME4=$TIME3*2)) # 183850
((TIME5=$TIME3*$TIME1)) # 3309300
((TIME6=100*86400+3*3600+40*60+31)) # 8653231 s = 100 days + 3 hours + 40 min + 31 sec
# outputting results: another way to show results (via echo & command substitution with backticks)
echo $TIME1 - `convertsecs2dhms $TIME1`
echo $TIME2 - `convertsecs2dhms $TIME2`
echo $TIME3 - `convertsecs2dhms $TIME3`
echo $TIME4 - `convertsecs2dhms $TIME4`
echo $TIME5 - `convertsecs2dhms $TIME5`
echo $TIME6 - `convertsecs2dhms $TIME6`
# OUTPUT WOULD BE LIKE THIS (If none pretty printf used):
# 36 - 00-00:00:36
# 1036 - 00-00:17:16
# 91925 - 01-01:32:05
# 183850 - 02-03:04:10
# 3309300 - 38-07:15:00
# 8653231 - 100-03:40:31
# OUTPUT WOULD BE LIKE THIS (If pretty printf used):
# 36 - 00d 00h 00m 36s
# 1036 - 00d 00h 17m 16s
# 91925 - 01d 01h 32m 05s
# 183850 - 02d 03h 04m 10s
# 3309300 - 38d 07h 15m 00s
# 1000000000 - 11574d 01h 46m 40s
Io uso C shell, in questo modo:
#! /bin/csh -f
set begDate_r = `date +%s`
set endDate_r = `date +%s`
set secs = `echo "$endDate_r - $begDate_r" | bc`
set h = `echo $secs/3600 | bc`
set m = `echo "$secs/60 - 60*$h" | bc`
set s = `echo $secs%60 | bc`
echo "Formatted Time: $h HOUR(s) - $m MIN(s) - $s SEC(s)"
continuando @ Daren`s risposta, tanto per essere chiari: Se si desidera utilizzare la conversione in il fuso orario, non utilizzare il l'interruttore "u", come in: date -d @$i +%T
o in alcuni casi date -d @"$i" +%T
.
- 1. per convertire il tempo in numero di secondi
- 2. Ruby/Rails - Come convertire secondi in tempo?
- 3. intervallo di tempo formato per mostrare ore, minuti, secondi
- 4. Come inizializzare un intervallo di tempo con i secondi
- 5. Durata intervallo di tempo
- 6. Converti il tempo in secondi in PostgreSQL
- 7. Differenza di tempo in secondi
- 8. Pianificazione del processo java per un intervallo di tempo specifico con un determinato intervallo di tempo
- 9. Tempo di incremento (minuti e secondi) nello script bash/shell
- 10. Intervallo doppio intervallo tempo standard
- 11. Differenza di tempo in secondi da numpy.timedelta64
- 12. Processo di uccisione dopo un determinato intervallo di tempo?
- 13. conversione di una stringa di tempo per secondi in python
- 14. Python - Convertire secondi di tanto epoca nel tempo leggibile
- 15. Formato personalizzato per intervallo di tempo relativo
- 16. Panda: rolling medio per intervallo di tempo
- 17. Tweet Twitter API per intervallo di tempo
- 18. Highstock - intervallo di tempo irregolare
- 19. Raggruppamento dati per intervallo di tempo
- 20. convertire il tempo di sapone in PHP
- 21. Tempo in secondi per il formato stringa personalizzato
- 22. Come convertire il tempo Epoch all'anno
- 23. LibreOffice Intervallo di tempo SUM in formato HH: MM: SS
- 24. Come ottenere il tempo in millisecondi in Android Shell?
- 25. Conversione di un float in un intervallo di tempo
- 26. Come aggiungere un intervallo di tempo a un NSDate?
- 27. Come calcolare il tempo trascorso in secondi in VBA?
- 28. Gruppo DateTime da un tempo arbitrario intervallo
- 29. Come eseguire un metodo dopo un intervallo di tempo specifico?
- 30. Rimuovi secondi in Chrome input = tempo
Rapido e impressionante! –
Guarda la risposta di Alan Tam qui sotto per come funziona in un Mac/Unix: http://stackoverflow.com/a/21822510/243709 –
Penso che valga la pena menzionare questo funziona solo per 'i' inferiore a 86400:' i = 86400; date -u -d @ $ {i} + "% T" 'ti darà' 00: 00: 00' – galaux