2013-05-07 15 views

Odpowiedz

5
date +%s 

zwraca bieżącą datetime w sekundach od 1970-01-01 00:00:00 UTC

jeśli chcesz uzyskać daną datetime w sekundach od 1970-01-01 00:00:00 UTC, na przykład:

kent$ date -d"2008-08-08 20:20:20" +%s 
1218219620 

dostać diff w sekundach, po prostu dostać dwie daty w kilka sekund i zrobić s1-s2

+0

Należy pamiętać, że jeśli sygnatury czasowe nie zawierają dat, należy je jeszcze opatrzyć 'date'. W przeciwnym razie, jeśli minie tylko czas, "date" przyjmie dzisiaj, a czasy obliczone po obu stronach północy będą miały dodatkową 24-godzinną różnicę między nimi. – spbnick

+1

Dzięki to działa, zaczynam = $ (data -d "$ DateStart" +% s) i koniec = $ (data -d "$ DateEnd" +% s) i po czasie = $ (koniec-koniec). – MaxGeneGrim

2

Zakładając czas w formacie GG: MM: SS jest zmienna time_hhmmss i czas w sekund musi być przechowywany w time_s:

IFS=: read -r h m s <<<"$time_hhmmss" 
time_s=$(((h * 60 + m) * 60 + s)) 
0

spróbuje użyć mojego rozwiązania z sed + awk:

echo $DateStart | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}' 
echo $DateEnd | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}' 

to dzieli ciąg z SED, a potem odwraca numery tyłu ("DD hh mm ss" -> "ss mm hh DD") i oblicza je za pomocą awk. To działa nawet dodać dni: [[DD] hh:] mm: ss, np:

 34:56 
    12:34:56 
123-12:34:56 
2

Na komputerze Mac można przekonwertować datę na inny dzień z kombinacji -j i -f opcja:

$ date -j -f '%Y-%m-%d %H:%M:%S' "2016-02-22 20:22:14" '+%s' 
1456168934 

Gdzie -j tłumi zmiany zegara systemowego, -f <fmt> daje format używany do analizowania daną datę, "2016-02-22 20:22:14" to data wejścia, a format wyjściowy to +<fmt>.

Powiązane problemy