Jeśli twój czas trwania będzie zawsze krótszy niż jeden dzień, możesz użyć +%Tformatu Godziny: Minuty: Sekundy, aby to date +%T "1970-01-01 + ${seconds} seconds"uzyskać21:33:09
Yzmir Ramirez
7
Zasługa Stéphane Gimenez ale jeśli ktoś chciałby, aby wyświetlić sekund tylko wtedy, gdy okres ten wynosi mniej niż minutę tutaj jest moja wersja zmodyfikowana, że używam (również ze stałym liczby mnogiej):
W powyższym wyrażam echo wyjścia innego polecenia, które jest uruchamiane wewnątrz polecenia $( ... )podrzędnego. To polecenie podrzędne robi to, obliczając liczbę dni (sekundy / 86400), a następnie używa datepolecenia w innym poleceniu podrzędnym $(date -d ... ), aby wygenerować godziny, minuty i sekundy dla określonej liczby sekund.
Opieram się na odpowiedzi atti, która spodobała mi się jako pomysł.
Możesz to zrobić za pomocą wbudowanego basha, printfktóry zajmie kilka sekund od epoki jako argument. Nie trzeba widelca, aby uruchomić date.
Musisz ustawić strefę czasową na UTC, printfponieważ formatuje ona czas w lokalnej strefie czasowej, a jeśli nie jesteś w czasie UTC, otrzymasz błędną odpowiedź.
date --date '@1005454800'daje ci Sun Nov 11 00:00:00 EST 2001, czyli 1005454800 sekund po epoce Uniksa. Możesz go sformatować za pomocą opcji data + FORMAT.
Odpowiedzi:
Możesz użyć czegoś takiego:
Przykłady:
źródło
Najłatwiejszym i najczystszym sposobem jest ta jedna linijka (tutaj przy założeniu GNU
date
):Jeśli liczba sekund wynosi, powiedz:
-> wyjście:
1428 days 21 hours 33 minutes 09 seconds
źródło
+%T
formatu Godziny: Minuty: Sekundy, aby todate +%T "1970-01-01 + ${seconds} seconds"
uzyskać21:33:09
Zasługa Stéphane Gimenez ale jeśli ktoś chciałby, aby wyświetlić sekund tylko wtedy, gdy okres ten wynosi mniej niż minutę tutaj jest moja wersja zmodyfikowana, że używam (również ze stałym liczby mnogiej):
Alternatywny przykład w POSIX:
źródło
convert $s
aby uzyskać niezłe wyniki.Zrobiłbym to w ten sposób:
Oto jeden linijka powyżej, podzielony, aby łatwiej było zrozumieć:
W powyższym wyrażam echo wyjścia innego polecenia, które jest uruchamiane wewnątrz polecenia
$( ... )
podrzędnego. To polecenie podrzędne robi to, obliczając liczbę dni (sekundy / 86400), a następnie używadate
polecenia w innym poleceniu podrzędnym$(date -d ... )
, aby wygenerować godziny, minuty i sekundy dla określonej liczby sekund.źródło
Zmodyfikowałem funkcję displaytime powyżej ... w następujący sposób:
ponieważ zawsze chcę widzieć HH: MM: SS, nawet jeśli są zerami.
źródło
Opieram się na odpowiedzi atti, która spodobała mi się jako pomysł.
Możesz to zrobić za pomocą wbudowanego basha,
printf
który zajmie kilka sekund od epoki jako argument. Nie trzeba widelca, aby uruchomićdate
.Musisz ustawić strefę czasową na UTC,
printf
ponieważ formatuje ona czas w lokalnej strefie czasowej, a jeśli nie jesteś w czasie UTC, otrzymasz błędną odpowiedź.W moim czasie lokalnym (obecnie NZDT - +1300) odpowiedź jest błędna, jeśli nie ustawię strefy czasowej
Z ustawieniem strefy czasowej i bez
źródło
printf
wprowadził tę%(datefmt)T
notację zaczynając od bash-4.2-alpha.Tutaj jeden
Wydajność:
źródło
date --date '@1005454800'
daje ciSun Nov 11 00:00:00 EST 2001
, czyli 1005454800 sekund po epoce Uniksa. Możesz go sformatować za pomocą opcji data + FORMAT.źródło