Я просмотрел предыдущие вопросы, но ни на один не нашел ответа, который я искал. Как преобразовать миллисекунды из метода StopWatch в минуты и секунды? Я имею:
watch.start();
запустить секундомер и
watch.stop();
чтобы остановить часы. Позже я
watch.getTime();
который возвращает миллисекунды. Я хочу вернуть его через секунды и минуты. Как мне это сделать? Я ищу способ сделать это без умножения / деления на 1000, а скорее метод, который сделает все вычисления более читаемыми и менее подверженными ошибкам.
Ответы:
Я бы предложил использовать
TimeUnit
. Вы можете использовать это так:long minutes = TimeUnit.MILLISECONDS.toMinutes(millis); long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
источник
minutes = ((milliseconds / 1000) / 60)
1 minute 30 seconds
Этот ответ дает , например, минуты или секунды1 minute 90 seconds
.После преобразования миллисекунд в секунды (делением на 1000) вы можете использовать
/ 60
для получения значения минут и% 60
(остаток) для получения значения «секунд в минуте».long millis = .....; // obtained from StopWatch long minutes = (millis / 1000) / 60; int seconds = (int)((millis / 1000) % 60);
источник
tl; dr
Duration d = Duration.ofMillis( … ) ; int minutes = d.toMinutesPart() ; int seconds = d.toSecondsPart() ;
Java 9 и новее
В Java 9 и более поздних версиях создайте
Duration
и вызовитеto…Part
методы. В этом случае:toMinutesPart
иtoSecondsPart
.Захватите начало и остановку секундомера.
Представляют прошедшее время в
Duration
объекте.Опросите каждую часть, минуты и секунды.
int minutes = d.toMinutesPart(); int seconds = d.toSecondsPart();
Вы также можете захотеть увидеть, как долго ваш секундомер работает.
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
В Java 8 в
Duration
классе отсутствуютto…Part
методы. Вам нужно будет выполнить математику, как показано в других ответах.long entireDurationAsSeconds = d.getSeconds();
Или позвольте
Duration
сделать математику.long minutesPart = d.toMinutes(); long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Смотрите живой код на IdeOne.com .
разрешение
FYI, разрешение
now
методов изменилось между Java 8 и Java 9. См. Этот вопрос .Clock
ограничена разрешением в миллисекунды. Таким образом, вы можете хранить значения в наносекундах, но фиксировать их только за миллисекунды.О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в
java.sql.*
занятиях.Где взять классы java.time?
источник
Это просто математика. 1000 миллисекунд = 1 секунда и 60000 миллисекунд = 1 минута; Так что просто сделай,
int seconds=(millis/1000)%60; long minutes=((millis-seconds)/1000)/60;
источник
(millis/1000-seconds)/60
Я создавал приложение для mp3-плеера для Android, поэтому я сделал это так, чтобы получить текущее время и продолжительность
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; }
источник
Вот полная программа
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 ); } }
Я нашел эту программу здесь " Ссылка ", там подробно объясняется.
источник
X миллисекунд = X / 1000 секунд = (X / 1000) / 60 минут
Если у вас есть 100 000 миллисекунд, разделите это значение на 1000, и у вас останется 100 секунд. Теперь 100/60 = 1,666 ~ минут, но дробные минуты не имеют значения, поэтому: сделайте 100% 60 = 40 секунд, чтобы найти остаток, затем целочисленное деление 100/60 = 1 минута с остатком 40 секунд. Ответ: 1 минута 40 секунд.
источник
Чтобы преобразовать время в миллисекундах напрямую в минуты: второй формат, вы можете использовать это
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
Это вернет строку со временем в правильном форматировании. У меня это сработало.
источник
Чтобы получить фактические часы, минуты и секунды, которые отображаются на часах, попробуйте этот код
val sec = (milliSec/1000) % 60 val min = ((milliSec/1000) / 60) % 60 val hour = ((milliSec/1000) / 60) / 60
источник
Вы можете попробовать поступить следующим образом:
Передать значение ms из
к
Реализация 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" }
Реализация на 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" }
источник
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); }
Тестирование
long delay = 1000*60*20 + 1000*5 + 10; LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));
Вывод
INFO: Delay Expected 00 days - 00:20:05.010
источник
Я не думаю, что Java 1.5 поддерживает одновременный TimeUnit. В противном случае я бы предложил TimeUnit. Ниже приведен чисто математический подход.
stopWatch.stop(); long milliseconds = stopWatch.getTime(); int seconds = (int) ((milliseconds / 1000) % 60); int minutes = (int) ((milliseconds / 1000) / 60);
источник
Вы можете легко преобразовать миллисекунды в секунды, минуты и часы.
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 --------------------------------------------------------------------
источник
Код ниже выполняет работу по преобразованию мс в мин: сек в формате [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]
источник
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(); } }
источник
Вот простое решение. Примеры вызовов, которые можно использовать в любом методе:
StopWatch.start();
StopWatch.stop();
StopWatch.displayDiff();
отображает разницу в минутах и секундах между запуском и остановкой. (пройденное время)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"); } }
источник
toMillis
Метод сообщает всю длительность как миллисекунды.