Muszę zamienić dowolną liczbę milisekund na dni, godziny, minuty sekundę.
Na przykład: 10 dni, 5 godzin, 13 minut, 1 sekunda.
date
time
string-formatting
datetime-format
FlySwat
źródło
źródło
Odpowiedzi:
Cóż, ponieważ nikt inny nie zrobił tego, napiszę prosty kod, aby to zrobić:
Cieszę się, że zatrzymałeś się na kilka dni i nie prosiłeś przez miesiące. :)
Zauważ, że w powyższym założono, że
/
reprezentuje obcięcie dzielenia liczb całkowitych. Jeśli używasz tego kodu w języku, w którym/
reprezentuje dzielenie zmiennoprzecinkowe, będziesz musiał ręcznie obciąć wyniki dzielenia zgodnie z potrzebami.źródło
Niech A będzie liczbą milisekund. W takim razie masz:
i tak dalej (
%
jest operatorem modułu).Mam nadzieję że to pomoże.
źródło
/
dzielenie zmiennoprzecinkowe jest konieczne, musisz skrócić wartość. W innych odpowiedziach zakłada się, że/
dokonuje się dzielenia liczb całkowitych.Oba poniższe rozwiązania wykorzystują javascript (nie miałem pojęcia, że rozwiązaniem jest agnostyk językowy!). Oba rozwiązania będą musiały zostać przedłużone, jeśli przechwytywanie trwa
> 1 month
.Rozwiązanie 1: Użyj obiektu Date
Daje:
Biblioteki są pomocne, ale po co korzystać z biblioteki, skoro można na nowo wynaleźć koło! :)
Rozwiązanie 2: Napisz własny parser
Tworzy obiekt „czasu trwania” z dowolnymi wymaganymi polami. Formatowanie znacznika czasu staje się wtedy proste ...
Daje:
źródło
return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
var nonZero = function(u){ return !u.startsWith("0"); }; // convert object to a string representation... dur.toString = function(){ return units.reverse().map(function(u){ return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label); }).filter(nonZero).join(', '); };
Apache Commons Lang ma DurationFormatUtils, który ma bardzo pomocne metody, takie jak formatDurationWords .
źródło
Powinieneś używać funkcji daty i godziny w dowolnym języku, którego używasz, ale dla zabawy oto kod:
źródło
To jest metoda, którą napisałem. Pobiera
integer milliseconds value
i zwracahuman-readable String
:źródło
źródło
Sugerowałbym użycie dowolnych funkcji / bibliotek daty / czasu, które zapewnia wybrany język / framework. Sprawdź również funkcje formatowania ciągów, ponieważ często zapewniają one łatwe sposoby przekazywania daty / znaczników czasu i generowania ciągu w formacie czytelnym dla człowieka.
źródło
Twoje wybory są proste:
źródło
źródło
Powinno to wydrukować: 0,0: 1: 9
źródło
Dlaczego po prostu nie zrobić czegoś takiego:
var ms = 86400;
var sekund = ms / 1000; //86.4
var minuty = sekundy / 60; //1.4400000000000002
var hours = minuty / 60; //0.024000000000000004
var dni = godziny / 24; //0.0010000000000000002
I radzenie sobie z precyzją zmiennoprzecinkową, np. Number (minutes.toFixed (5)) //1.44
źródło
W java
Daje coś takiego:
źródło
Nie jestem w stanie skomentować pierwszej odpowiedzi na Twoje pytanie, ale jest mały błąd. Powinieneś użyć parseInt lub Math.floor, aby przekonwertować liczby zmiennoprzecinkowe na liczby całkowite, i
Osobiście używam CoffeeScript w moich projektach i mój kod wygląda tak:
źródło
To jest rozwiązanie. Później możesz podzielić przez „:” i pobrać wartości z tablicy
źródło
Oto moje rozwiązanie przy użyciu TimeUnit.
UPDATE: Powinienem zaznaczyć, że jest to napisane w stylu groovy, ale Java jest prawie identyczna.
źródło
Elastyczny sposób na zrobienie tego:
(Nie stworzono na bieżącą datę, ale wystarczająco dobre na okresy)
Uwaga: możesz również ustawić timeSteps jako parametr, jeśli chcesz kontrolować zakresy czasu.
jak używać (skopiuj test):
źródło
Proponuję skorzystać z http://www.ocpsoft.org/prettytime/ biblioteki.
bardzo łatwo jest uzyskać przedział czasu w postaci czytelnej dla człowieka, na przykład
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));
będzie drukowane jak „chwile od teraz”
inny przykład
PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);
następnie ciąg znaków temu = „1 godzinę temu”
źródło
Oto bardziej precyzyjna metoda w JAVA, zaimplementowałem tę prostą logikę, mam nadzieję, że to ci pomoże:
źródło