Przejrzałem poprzednie pytania, ale żadne z nich nie miało odpowiedzi, której szukałem. Jak przekonwertować milisekundy z metody StopWatch na minuty i sekundy? Mam:
watch.start();
aby uruchomić stoper i
watch.stop();
zatrzymać zegarek. Później to zrobiłem
watch.getTime();
która zwraca milisekundy. Chcę, żeby wróciło za kilka sekund i minut. Jak mam to zrobić? Szukam sposobu na zrobienie tego bez mnożenia / dzielenia przez 1000, ale raczej metody, która sprawi, że całe obliczenia będą bardziej czytelne i mniej podatne na błędy.
Odpowiedzi:
Sugerowałbym użycie
TimeUnit
. Możesz go używać w ten sposób:long minutes = TimeUnit.MILLISECONDS.toMinutes(millis); long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
źródło
minutes = ((milliseconds / 1000) / 60)
1 minute 30 seconds
ta odpowiedź, podaje minuty lub sekundy1 minute 90 seconds
.Po przeliczeniu milis na sekundy (dzieląc przez 1000), możesz użyć,
/ 60
aby uzyskać wartość minut i% 60
(reszta), aby uzyskać wartość „sekund w minutach”.long millis = .....; // obtained from StopWatch long minutes = (millis / 1000) / 60; int seconds = (int)((millis / 1000) % 60);
źródło
tl; dr
Duration d = Duration.ofMillis( … ) ; int minutes = d.toMinutesPart() ; int seconds = d.toSecondsPart() ;
Java 9 i nowsze
W Javie 9 i nowszych utwórz a
Duration
i wywołajto…Part
metody. W tym przypadku:toMinutesPart
itoSecondsPart
.Uchwyć początek i koniec stopera.
Przedstawia upływający czas w
Duration
obiekcie.Zapytaj o każdą część, minuty i sekundy.
int minutes = d.toMinutesPart(); int seconds = d.toSecondsPart();
Możesz także chcieć sprawdzić, czy stoper działał zgodnie z oczekiwaniami.
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
W Javie 8 tej
Duration
klasie brakujeto…Part
metod. Będziesz musiał wykonać obliczenia matematyczne, jak pokazano w innych odpowiedziach.long entireDurationAsSeconds = d.getSeconds();
Albo zróbmy
Duration
matematykę.long minutesPart = d.toMinutes(); long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Zobacz kod na żywo w IdeOne.com .
Rozkład
FYI, rozdzielczość
now
metod zmieniona między Java 8 i Java 9. Zobacz to pytanie .Clock
jest ograniczona do rozdzielczości milisekund. Możesz więc przechowywać wartości w nanosekundach, ale przechwytywać je tylko w milisekundach.Informacje o java.time
Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani
java.sql.*
klas.Skąd wziąć klasy java.time?
źródło
To tylko podstawowa matematyka. 1000 milisekund = 1 sekunda i 60000 milisekund = 1 minuta; Więc po prostu zrób
int seconds=(millis/1000)%60; long minutes=((millis-seconds)/1000)/60;
źródło
(millis/1000-seconds)/60
Tworzyłem aplikację odtwarzacza mp3 na Androida, więc zrobiłem to w ten sposób, aby uzyskać aktualny czas i czas trwania
private String millisecondsToTime(long milliseconds) { long minutes = (milliseconds / 1000) / 60; long seconds = (milliseconds / 1000) % 60; String secondsStr = Long.toString(seconds); String secs; if (secondsStr.length() >= 2) { secs = secondsStr.substring(0, 2); } else { secs = "0" + secondsStr; } return minutes + ":" + secs; }
źródło
Oto pełny program
import java.util.concurrent.TimeUnit; public class Milliseconds { public static void main(String[] args) { long milliseconds = 1000000; // long minutes = (milliseconds / 1000) / 60; long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds); // long seconds = (milliseconds / 1000); long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds); System.out.format("%d Milliseconds = %d minutes\n", milliseconds, minutes ); System.out.println("Or"); System.out.format("%d Milliseconds = %d seconds", milliseconds, seconds ); } }
Znalazłem ten program tutaj " Link " tam jest szczegółowo wyjaśniony.
źródło
X milisekund = X / 1000 sekund = (X / 1000) / 60 minut
Jeśli masz 100 000 milisekund, podziel tę wartość przez 1000 i zostanie ci 100 sekund. Teraz 100/60 = 1,666 ~ minuty, ale ułamki minut nie mają wartości, więc: zrób 100% 60 = 40 sekund, aby znaleźć resztę, a następnie dzielenie liczb całkowitych 100/60 = 1 minuta, z resztą 40 sekund. Odpowiedź: 1 minuta, 40 sekund.
źródło
Aby przekonwertować czas w milisach bezpośrednio na minuty: możesz użyć tego drugiego formatu
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
To zwróci ciąg z czasem we właściwym formatowaniu. U mnie to zadziałało.
źródło
Aby uzyskać aktualną godzinę, minuty i sekundy wyświetlane na zegarku, wypróbuj ten kod
val sec = (milliSec/1000) % 60 val min = ((milliSec/1000) / 60) % 60 val hour = ((milliSec/1000) / 60) / 60
źródło
Możesz spróbować postępować w ten sposób:
Przekaż wartość ms z
do
Wdrożenie Kotlin:
fun getDisplayValue(ms: Long): String { val duration = Duration.ofMillis(ms) val minutes = duration.toMinutes() val seconds = duration.minusMinutes(minutes).seconds return "${minutes}min ${seconds}sec" }
Implementacja Java:
public String getDisplayValue(Long ms) { Duration duration = Duration.ofMillis(ms); Long minutes = duration.toMinutes(); Long seconds = duration.minusMinutes(minutes).getSeconds(); return minutes + "min " + seconds "sec" }
źródło
public static String getIntervalTime(long longInterval) { long intMillis = longInterval; long dd = TimeUnit.MILLISECONDS.toDays(intMillis); long daysMillis = TimeUnit.DAYS.toMillis(dd); intMillis -= daysMillis; long hh = TimeUnit.MILLISECONDS.toHours(intMillis); long hoursMillis = TimeUnit.HOURS.toMillis(hh); intMillis -= hoursMillis; long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis); long minutesMillis = TimeUnit.MINUTES.toMillis(mm); intMillis -= minutesMillis; long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis); long secondsMillis = TimeUnit.SECONDS.toMillis(ss); intMillis -= secondsMillis; String stringInterval = "%02d days - %02d:%02d:%02d.%03d"; return String.format(stringInterval , dd, hh, mm, ss, intMillis); }
Testowanie
long delay = 1000*60*20 + 1000*5 + 10; LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));
Wynik
INFO: Delay Expected 00 days - 00:20:05.010
źródło
Myślę, że Java 1.5 nie obsługuje współbieżnego TimeUnit. W przeciwnym razie sugerowałbym TimeUnit. Poniżej jest oparte na podejściu czysto matematycznym.
stopWatch.stop(); long milliseconds = stopWatch.getTime(); int seconds = (int) ((milliseconds / 1000) % 60); int minutes = (int) ((milliseconds / 1000) / 60);
źródło
Możesz łatwo zamienić milisekundy na sekundy, minuty i godziny.
val millis = **milliSecondsYouWantToConvert** val seconds = (millis / 1000) % 60 val minutes = ((millis / 1000) / 60) % 60 val hours = ((millis / 1000) / 60) / 60 println("--------------------------------------------------------------------") println(String.format("%02dh : %02dm : %02ds remaining", hours, minutes, seconds)) println("--------------------------------------------------------------------") **RESULT :** -------------------------------------------------------------------- 01h : 23m : 37s remaining --------------------------------------------------------------------
źródło
Poniższy kod działa przy konwersji ms na min: secs w formacie [m: ss]
int seconds; int minutes; String Sec; long Mills = ...; // Milliseconds goes here minutes = (int)(Mills / 1000) / 60; seconds = (int)((Mills / 1000) % 60); Sec = seconds+""; TextView.setText(minutes+":"+Sec);//Display duration [3:40]
źródło
package com.v3mobi.userpersistdatetime; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast; import java.util.Date; import java.util.concurrent.TimeUnit; public class UserActivity extends AppCompatActivity { Date startDate; Date endDate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user); startDate = java.util.Calendar.getInstance().getTime(); //set your start time } @Override protected void onStop() { super.onStop(); endDate = java.util.Calendar.getInstance().getTime(); // set your end time chekUserPersistence(); } private void chekUserPersistence() { long duration = endDate.getTime() - startDate.getTime(); // long duration = 301000; long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration); // minutes ok long secs = (duration/1000) % 60; // minutes ok Toast.makeText(UserActivity.this, "Diff " + diffInMinutes + " : "+ secs , Toast.LENGTH_SHORT).show(); System.out.println("Diff " + diffInMinutes +" : "+ secs ); Log.e("keshav","diffInMinutes -->" +diffInMinutes); Log.e("keshav","secs -->" +secs); finish(); } }
źródło
Oto proste rozwiązanie. Przykładowe wywołania, których można użyć w dowolnej metodzie:
StopWatch.start();
StopWatch.stop();
StopWatch.displayDiff();
wyświetla różnicę w minutach i sekundach między uruchomieniem a zatrzymaniem. (czas, który upłynął)import java.time.Duration; import java.time.Instant; public class StopWatch { private static Instant start; private static Instant stop; private void StopWatch() { // not called } public static void start() { start = Instant.now(); } public static void stop() { stop = Instant.now(); } public static void displayDiff() { Duration totalTime = Duration.between(start, stop); System.out.println(totalTime.toMinutes() + " Minutes " + totalTime.toMillis() / 1000 + " Seconds"); } }
źródło
toMillis
Metoda zgłasza cały czas jako milisekund.