Ich habe eine Variable von $ i, die Sekunden in einem Shell-Skript ist, und ich versuche, es in 24 Stunden HH: MM: SS zu konvertieren. Ist das in der Schale möglich?Konvertieren Sie eine Zeitspanne in Sekunden in formatierte Zeit in der Shell
Antwort
Ist hier ein Spaß hacky Weise genau das zu tun, was man für = suchen)
date -u -d @${i} +"%T"
Erläuterung:
- Das
date
Dienstprogramm ermöglicht es Ihnen, eine Zeit zu geben, aus der Zeichenfolge, in Sekunden seit 1970-01-01 00:00:00 UTC, und geben Sie es in dem Format aus, das Sie angeben. - Die
-u
Option ist die UTC-Zeit angezeigt werden, damit es nicht Faktor in Zeitzone Offsets (seit Startzeit von 1970 in UTC ist) - Die folgenden Teile sind GNU
date
-spezifischen (Linux):- der
-d
Teil erzähltdate
die Zeitinformationen aus der Zeichenfolge zu akzeptieren anstatt mitnow
- der
@${i}
Teil ist, wie Sie sagen, dassdate
$i
in Sekunden
- der
- Die
+"%T"
dient zum Formatieren Ihrer Ausgabe. Von derman date
Seite:%T time; same as %H:%M:%S
. Da wir uns nur um denHH:MM:SS
Teil kümmern, passt das!
Wenn $i
seit der Epoche etwas Datum in Sekunde darstellt, könnte man es angezeigt mit
date -u -d @$i +%H:%M:%S
, aber sie scheint zu glauben, daß $i
ein Intervall (zB einige Dauer) nicht ein Datum, und dann habe ich don verstehe nicht, was du willst.
Gleich (duplizieren) als @ Sampson-chen mit der +% T. –
Ein anderer Ansatz: Arithmetik
i=6789
((sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo $timestamp
produziert 1:53:09
war vielleicht nicht das, was OP war nach, aber war genau das, was ich brauchte. Vielen Dank. –
Das -d
Argument bisher nur von coreutils
(Linux) gilt.
In BSD/OS X ist
date -u -r $i +%T
funktioniert nicht unter AIX :( – zack
verwenden Hier mein algo/script Helfer auf meiner Website: http://ram.kossboss.com/seconds-to-split-time-convert/ ich diese elogant algo von hier verwendet: von 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)
Beispiel Mein Sekunde zu Tag, Stunde, Minute, Sekunde Konverter:
# 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
I C-Shell verwenden, wie folgt aus:
#! /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)"
Fortsetzung @ Daren`s Antwort, um nur klar zu sein: Wenn Sie die Umstellung auf Ihre Zeitzone verwenden möchten, die nicht verwenden "u" Schalter, wie in: date -d @$i +%T
oder in einigen Fällen date -d @"$i" +%T
.
- 1. Konvertieren Zeit in Sekunden String Ausgabe
- 2. Konvertieren möglicherweise falsche Zeit in Sekunden
- 3. lubridate, Datum in eine formatierte Zeitreihe konvertieren
- 4. Konvertieren Sie eine Hash-Zeichenfolge in eine formatierte Zahl?
- 5. Funktion zu konvertieren Sekunden Zeit
- 6. eine Zeit Zeichenfolge Sekunden in Python Umwandlung
- 7. Konvertieren von ISO 8601 Datum Zeit in Sekunden in Python
- 8. Wie initialisiere ich eine Zeitspanne mit Sekunden
- 9. Zeit in Sekunden in PostgreSQL umwandeln
- 10. eine Zeichenfolge in einem formatierte Datum-Zeit-String konvertiert Python
- 11. ändern Eingabetyp Zeit Sekunden in der Steuerung
- 12. Konvertieren Zeichenfolge in die Anzahl der Sekunden
- 13. Wie erhalten Sie Zeit in Millisekunden in Android Shell?
- 14. PHP konvertiert bestimmte Zeichenfolge in eine gut formatierte Zeit Zeichenfolge
- 15. Konvertieren Sie Zeit in SQL in 12-Stunden-Format MIT Sekunden auf
- 16. Konvertieren von DateTime.Now in Sekunden
- 17. Konvertieren Sie eine Zeit in eine andere Zeitzone mit Javascript
- 18. Zeitstempel in Sekunden in Excel konvertieren
- 19. Format Zeitspanne zu zeigen, Stunden, Minuten, Sekunden
- 20. Konvertieren SmallInt in Zeit
- 21. Konvertieren Sie Zeit in PHP oder Javascript?
- 22. konvertieren HH: MM: SS Sekunden in momentjs
- 23. Konvertieren Sie Zeit in UTC vbScript
- 24. Konvertieren Sie Stunden: Minuten: Sekunden in Gesamtminuten in Excel
- 25. Konvertieren Sie eine Dezimalzeitrepräsentation in Unix-Epoche
- 26. iPhone Tabellenansicht Zeit in Sekunden angezeigt
- 27. vergleichen Zeit in EDT in Shell-Skript
- 28. Konvertieren Sie alle Werte in einer Excel-Spalte in eine formatierte URL
- 29. Ich möchte die Zeit in Sekunden in Tag Stunden Minute und Sekunde in Java konvertieren
- 30. Zähle Sekunden von 1970 Zeit in Javascript
Schnell und beeindruckend! –
Schauen Sie sich unten die Antwort von Alan Tam an, wie das in einem Mac/Unix funktioniert: http://stackoverflow.com/a/21822510/243709 –
Ich denke, es ist erwähnenswert, das funktioniert nur für 'i' niedriger als 86400s:' i = 86400; Datum -u -d @ $ {i} + "% T" 'wird dir' 00: 00: 00' geben – galaux