Mam zmienną $ i, która jest sekundami w skrypcie powłoki i próbuję przekonwertować ją na 24 GODZINY HH: MM: SS. Czy to możliwe w powłoce?Konwersja czasu w sekundach na sformatowany czas w powłoce
Odpowiedz
Oto zabawa hacky sposób, aby zrobić dokładnie to, czego szukasz =)
date -u -d @${i} +"%T"
Objaśnienie:
- Narzędzie
date
pozwala określić czas, ze sznurkiem, w sekundy od 1970-01-01 00:00:00 UTC, i wyprowadzać go w dowolnym formacie, który określisz. - Opcja
-u
jest wyświetlanie czasu UTC, a więc nie uwzględnia przesunięcia strefy czasowej (od czasu rozpoczęcia od 1970 roku jest w UTC) - Następujące części są GNU
date
-specyficznych (Linux):-d
część opowiadadate
zaakceptować informację czasową z ciągiem zamiast korzystanianow
@${i}
część jest jak mówiszdate
że$i
w sekundach
- Do formatowania danych wyjściowych służy
+"%T"
. Ze stronyman date
:%T time; same as %H:%M:%S
. Ponieważ zależy nam tylko na częściHH:MM:SS
, pasuje!
Jeśli $i
reprezentuje jakąś datę w sekundę od początku epoki, można wyświetlić go z
date -u -d @$i +%H:%M:%S
ale wydaje się przypuszczenie, że $i
jest przedział (np jakiś czas), a nie data, a potem don nie rozumiesz, czego chcesz.
To samo (duplikat) co @ sampson-chen z +% T. –
Innym podejściem: arytmetyka
i=6789
((sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo $timestamp
produkuje 1:53:09
może nie był tym, co OP był po, ale był dokładnie tym, czego potrzebowałem. Dziękuję Ci. –
-d
argument odnosi się do tej pory z coreutils
(Linux) tylko.
W BSD/OS X, użyj
date -u -r $i +%T
nie działa w systemie AIX :( – zack
Oto moja pomocnicy algo/skryptu na mojej stronie: http://ram.kossboss.com/seconds-to-split-time-convert/ użyłem tego elogant algo stąd: 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)
Przykład mój drugi dzień, godzina, minuta, drugi konwerter:
# 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
używam powłoka C, tak:
#! /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)"
Kontynuując @ Daren`s odpowiedź, żeby była jasność: Jeśli chcesz użyć do konwersji strefę czasową, nie używać "u" przełącznik, jak w: date -d @$i +%T
lub w niektórych przypadkach date -d @"$i" +%T
.
- 1. Różnica czasu w sekundach
- 2. Konwersja czasu epoki na "prawdziwą" datę/czas
- 3. Konwersja ciąg sformatowany ciąg daty i czasu przy użyciu Pythona
- 4. Najlepszy sposób na uzyskanie pliku Czas modyfikacji w sekundach
- 5. Konwersja TIMESTAMP na czas unixowy w PHP?
- 6. Konwersja Varchar na czas w SQL Server
- 7. Konwersja czas UTC do czasu pacyficznego
- 8. W R, aby przekonwertować sformatowany czas lokalny na epokę?
- 9. Uzyskaj aktualny czas w sekundach w module jądra
- 10. Konwersja czasu lokalnego do UTC Czas w ulu
- 11. Różnica czasu w sekundach od numpy.timedelta64
- 12. Różnica czasu w sekundach (jako zmiennoprzecinkowa)
- 13. Jak utworzyć znacznik czasu w sekundach
- 14. Jak uzyskać czas w milisekundach w powłoce Androida?
- 15. Czas w sekundach do niestandardowego formatu ciągu znaków
- 16. Konwersja daty/czasu w GMT na EST w JavaScript
- 17. Nagios: CRITICAL - Czas oczekiwania na gniazdo po 10 sekundach
- 18. Wykonaj sformatowany czas w plasterku za pomocą szablonu/html/template
- 19. Różnica w sekundach między znacznikami czasu w Sqlite3
- 20. Konwersja Joda LocalDateTime na uniksowy znacznik czasu
- 21. Jak obliczyć upływ czasu w sekundach w VBA?
- 22. Konwersja daty i czasu na inną strefę czasową w java
- 23. Jak tymczasowo dostosować datę/czas w powłoce systemu Linux
- 24. Konwersja znacznika czasu Ruby do sekund w Epoce iz powrotem
- 25. Konwersja czasu lokalnego do UTC w Railsach
- 26. różnica w sekundach między dwiema datami za pomocą czasu joda?
- 27. Znajdź różnicę czasu w sekundach jako liczbę całkowitą z pytonem
- 28. GcWatcher.finalize upłynął limit czasu po 10 sekundach
- 29. Konwersja joda LocalTime na sql Czas
- 30. Konwersja pand DateTimeIndex na czas Unix?
Szybkie i imponujące! –
Spójrz na odpowiedź Alana Tama poniżej, aby dowiedzieć się, jak to działa w systemie Mac/Unix: http://stackoverflow.com/a/21822510/243709 –
Myślę, że warto wspomnieć, że działa to tylko dla 'i' niższego niż 86400:' i = 86400; date -u -d @ $ {i} + "% T" 'daje' 00: 00: 00' – galaux