밀리 초를 분과 초로 변환 하시겠습니까?


83

이전 질문을 살펴 보았지만 내가 찾고있는 답이 없었습니다. 밀리 초를 StopWatch 메서드에서 분 및 초로 변환하려면 어떻게합니까? 나는 가지고있다:

 watch.start();

스톱워치를 시작하고

  watch.stop();

시계를 중지합니다. 나는 나중에

  watch.getTime();

밀리 초를 반환합니다. 초 및 분 단위로 반환되기를 원합니다. 그렇게하려면 어떻게해야합니까? 나는 1000을 곱하거나 나누지 않고 전체 계산을 더 읽기 쉽고 오류 가능성이 적은 방법을 찾는 방법을 찾고 있습니다.


x 밀리 초 = x / 1000 초. 그러면 z 초 = z / 60 분입니다. z % 60을 수행하여 남은 시간 (초)을 찾을 수 있습니다.
Kon

4
기본 수학 : 1000 밀리 초 = 1 초. 60 초 = 1 분.
Marc B

1
이 게시물을 확인하십시오 : stackoverflow.com/questions/625433/… . 원하는 것을 얻을 수 있습니다.
bmac151 jul.

1
이것은 실제로 정말 간단한 질문입니다. 당신은 무엇을 시도 했습니까?
Monica 복원-notmaynard

답변:


192

사용하는 것이 좋습니다 TimeUnit. 다음과 같이 사용할 수 있습니다.

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

내 유일한 문제는 모르겠습니다. millis를 정의하는 방법 ( "millis는 변수로 확인할 수 없음"으로 반환되고 System.out.println (); 메서드에서 액세스하는 방법을 모르겠습니다.

밀리 초가 이미 긴 경우에는 숫자 만 사용하여이를 수행 할 수 있습니다. 간단한 계산을 위해 새 라이브러리를 도입 할 필요가 거의 없습니다. minutes = ((milliseconds / 1000) / 60)
Kyle Falconer

2
이것은 7. 통해 자바 5의 가장 좋은 대답을 것 같다
숀 Barbeau

7
@Sotti Brilliant? 이것은 질문을 해결하지 않습니다! 문제는 분을 요구 하고 스톱워치의 판독은, 예를 들어 같은 초 1 minute 30 seconds이 대답 분 제공 또는 예를 들어, 초 1 minute 90 seconds.
Basil Bourque

1
나는 그것을 사용하고 싶지만 초는 정수가 아닌 두 배로, 예를 들어 1.5s입니다. 어떻게 든 가능합니까?
Line

49

밀리 초를 초로 변환 한 후 (1000으로 나누어서)를 사용 / 60하여 분 값을 가져오고 % 60(나머지)를 사용하여 "초 단위"값을 가져올 수 있습니다.

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


25

tl; dr

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

Java 9 이상

Java 9 이상에서는를 만들고 메서드를 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 ) ;

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

경과 : 2M 15S

해결

참고로 nowJava 8과 Java 9 사이 에서 메서드 의 해결 방법이 변경되었습니다 . 이 질문을 참조하십시오 .

  • Java 9 는 나노초 단위의 정밀한 해상도로 순간을 포착합니다. 해상도는 컴퓨터 하드웨어의 성능에 따라 다릅니다. macOS Sierra가 설치된 MacBook Pro Retina에서 마이크로 초 (소수점 6 자리)가 표시됩니다.
  • Java 8 은 순간을 최대 밀리 초까지만 캡처합니다. 의 구현은 Clock밀리 초 단위로 제한됩니다. 따라서 나노초 단위로 값을 저장할 수 있지만 밀리 초 단위 로만 캡처 할 수 있습니다 .

java.time 정보

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이나 클래스 가 필요하지 않습니다 .java.sql.*

java.time 클래스는 어디서 구할 수 있습니까?

Java 또는 Android 버전과 함께 사용할 java.time 라이브러리 표


안드로이드 호출의 경우 API 레벨 26이 필요합니다.
Killer

@Killer 이전 Android의 경우 ThreeTen-BackportThreeTenABP 프로젝트를 참조하십시오 .
Basil Bourque

12

이것은 기본적인 수학입니다. 1000 밀리 초 = 1 초 및 60000 밀리 초 = 1 분; 그러니 그냥 해

int seconds=(millis/1000)%60;

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

16
실수가 있습니다(millis/1000-seconds)/60
Nayuki

10

저는 안드로이드 용 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
Basil Bourque

6

X 밀리 초 = X / 1000 초 = (X / 1000) / 60 분

100,000 밀리 초가있는 경우이 값을 1,000으로 나누면 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"
}

자바 구현 :

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

아래 코드는 [m : ss] 형식으로 ms를 min : secs로 변환하는 작업을 수행합니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.