Перетворення мілісекунд у хвилини та секунди?


83

Я переглядав попередні запитання, але жоден не мав відповіді, яку я шукав. Як перетворити мілісекунди із методу секундоміра в хвилини та секунди? У мене є:

 watch.start();

щоб запустити секундомір і

  watch.stop();

щоб зупинити годинник. Пізніше я

  watch.getTime();

який повертає мілісекунди. Я хочу, щоб він повернувся за секунди та хвилини. Як я можу це зробити?Я шукаю спосіб зробити це без множення / ділення на 1000, а скоріше метод, який зробить все обчислення більш читабельним і менш схильним до помилок.


х мілісекунд = х / 1000 секунд. Тоді z секунд = z / 60 хвилин. Ви можете зробити z% 60, щоб знайти кількість секунд, що залишились.
Kon

4
базова математика: 1000 мілісекунд = 1 секунда. 60 секунд = 1 хвилина.
Marc B

1
Перевірте цю публікацію: stackoverflow.com/questions/625433/… . Повинен отримати вам те, що ви хочете.
bmac151

1
Це насправді дуже просте запитання. Що ви пробували?
Відновити Моніку - notmaynard

Ви можете зробити це як readyandroid.wordpress.com/…
Готовий Android

Відповіді:


191

Я б запропонував використовувати TimeUnit. Ви можете використовувати його так:

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);

Моя єдина проблема - я не знаю: як визначити міліс (він повертається, оскільки "міліс не може бути вирішено змінною", і я не знаю, як отримати до нього доступ у методі System.out.println ();

Ви можете зробити це, використовуючи лише цифри, якщо мілісекунди - це вже щось на зразок довгого. Мало потрібно вводити нову бібліотеку, лише щоб зробити простий розрахунок. minutes = ((milliseconds / 1000) / 60)
Kyle Falconer

2
Здається, це найкраща відповідь для Java з 5 по 7.
Шон Барбо,

7
@Sotti Brilliant? Це не стосується Питання! Запитання вимагає хвилин і секунд, як зчитування секундоміра, наприклад 1 minute 30 secondsЦя відповідь надає, наприклад, хвилини або секунди 1 minute 90 seconds.
Василь Бурк,

1
Я хотів би використовувати його, але з секундами як дубль, а не ints, наприклад 1,5 с. Це якось можливо?
Лінія

48

Після перетворення міліс у секунди (поділивши на 1000), ви можете використовувати, / 60щоб отримати значення хвилин, а % 60(залишок), щоб отримати значення "секунд у хвилині".

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);

Ви можете зробити це як readyandroid.wordpress.com/…
Готовий Android

25

tl; д-р

Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;

Java 9 і пізніших версій

У Java 9 та пізніших версіях створіть a Durationта викликайте to…Partметоди. У цьому випадку: toMinutesPartі toSecondsPart.

Зафіксуйте старт і зупинку секундоміра.

Instant start = Instant.now(); 
…
Instant stop = Instant.now();

Представляють минулий час в Durationоб’єкті.

Duration d = Duration.between( start , stop );

Допитуйте кожну частину, хвилини та секунди.

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 .

Інтервал: 2016-12-18T08: 39: 34.099Z / 2016-12-18T08: 41: 49.099Z

d.toString (): PT2M15S

d.getSeconds (): 135

Минуло: 2М 15С

Дозвіл

FYI, роздільна здатність nowметодів змінилася між Java 8 і Java 9. Дивіться це запитання .

  • Java 9 фіксує момент з роздільною здатністю, такою ж, як наносекунди. Роздільна здатність залежить від можливостей обладнання вашого комп’ютера. Я бачу мікросекунди (шість цифр десяткового дробу) на MacBook Pro Retina з macOS Sierra.
  • Java 8 фіксує момент лише до мілісекунд. Реалізація Clockобмежена роздільною здатністю мілісекунд. Таким чином, ви можете зберігати значення в наносекундах, але фіксувати їх лише в мілісекундах.

Про java.time

Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і SimpleDateFormat.

Щоб дізнатись більше, див. Підручник Oracle . І шукайте в Stack Overflow багато прикладів та пояснень. Специфікація - JSR 310 .

Проект Joda-Time , який зараз перебуває в режимі обслуговування , радить перейти на класи java.time .

Ви можете обмінювати об'єкти java.time безпосередньо з базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або новішою. Не потрібні рядки, не потрібні java.sql.*класи.

Де отримати класи java.time?

Таблиця, яку бібліотеку java.time використовувати з якою версією Java або Android


для виклику Android потрібен рівень api 26.
Вбивця

@Killer Для попередніх версій Android дивіться проекти ThreeTen-Backport та ThreeTenABP .
Basil Bourque

12

Це лише основна математика. 1000 мілісекунд = 1 секунда і 60000 мілісекунд = 1 хвилина; Так що просто робіть,

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;

15
Тут помилка - другий рядок повинен бути(millis/1000-seconds)/60
Наюкі

9

Я створював програму mp3-плеєра для андроїда, тому зробив це так, щоб отримати поточний час та тривалість

 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;
}

7

Ось повна програма

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 );

}
}

Я знайшов цю програму тут " Посилання ", там вона детально пояснена.


1
Це не стосується Питання . Запитання задає хвилини та секунди як відлік секундоміра. Ви даєте два окремі результати, хвилини чи секунди. D
Василь Бурк,

6

X мілісекунд = X / 1000 секунд = (X / 1000) / 60 хвилин

Якщо у вас 100 000 мілісекунд, розділіть це значення на 1000, і у вас залишиться 100 секунд. Тепер 100/60 = 1,666 ~ хвилин, але дробові хвилини не мають значення, тому: зробіть 100% 60 = 40 секунд, щоб знайти залишок, потім ціле ділення 100/60 = 1 хвилина, з залишком 40 секунд. Відповідь: 1 хвилина 40 секунд.


5

Щоб перевести час у мілісах безпосередньо у хвилини: другий формат, ви можете використовувати це

String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));

Це поверне рядок із часом у правильному форматуванні. У мене це спрацювало.


Ага, добрий! Я щойно тестував на таймері, який працював у мілісекундах і працював!
esQmo_

5

Щоб отримати фактичну годину, хвилину та секунди, як показано на годиннику, спробуйте цей код

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60

5

Ви можете спробувати поступити таким чином:

Передати значення ms від

Long ms = watch.getTime();

до

getDisplayValue(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"
}

5
  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

3

Я не думаю, що Java 1.5 підтримує одночасний TimeUnit. В іншому випадку я б запропонував TimeUnit. Нижче засновано на чисто математичному підході.

stopWatch.stop();
long milliseconds = stopWatch.getTime();

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);

1

Ви можете легко перетворити мілісекунди в секунди, хвилини та години.

                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
--------------------------------------------------------------------


1

Нижче код виконує роботу з перетворення ms у min: secs у форматі [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]

0
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();
    }
}

-2

Ось просте рішення. Приклади викликів, які можна використовувати в будь-якому методі:

  • 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");
        }
    }
    

1
Невірно. toMillisМетод повідомляє всю тривалість як мілісекунди.
Basil Bourque
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.