Chuyển đổi Mili giây sang Phút và Giây?


83

Tôi đã xem qua các câu hỏi trước đây, nhưng không có câu trả lời mà tôi đang tìm kiếm. Làm cách nào để chuyển đổi mili giây từ phương pháp StopWatch sang Phút và Giây? Tôi có:

 watch.start();

để bắt đầu đồng hồ bấm giờ và

  watch.stop();

để dừng đồng hồ. Sau này tôi có

  watch.getTime();

trả về Mili giây. Tôi muốn nó quay lại sau Giây và Phút. Làm thế nào để tôi làm như vậy? Tôi đang tìm một cách để làm điều đó mà không cần nhân / chia cho 1000 mà là một phương pháp sẽ làm cho toàn bộ tính toán dễ đọc hơn và ít lỗi hơn.


x mili giây = x / 1000 giây. Khi đó z giây = z / 60 phút. Bạn có thể thực hiện z% 60 để tìm số giây còn lại.
Kon,

4
toán cơ bản: 1000 mili giây = 1 giây. 60 giây = 1 phút.
Marc B

1
Kiểm tra bài đăng này: stackoverflow.com/questions/625433/… . Bạn sẽ có được những gì bạn muốn.
bmac151

1
Đây thực sự là một câu hỏi thực sự đơn giản. Bạn đã thử những gì?
Khôi phục Monica - notmaynard

Bạn có thể làm như thế này readyandroid.wordpress.com/…
Android sẵn sàng

Câu trả lời:


191

Tôi sẽ đề nghị sử dụng TimeUnit. Bạn có thể sử dụng nó như thế này:

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

Vấn đề duy nhất của tôi là tôi không biết: Làm thế nào để xác định mili (Nó đang trả về là "không thể giải quyết mili thành một biến" và tôi không biết cách truy cập nó trong một phương thức System.out.println ();

Bạn có thể làm điều này chỉ bằng cách sử dụng số nếu mili giây đã là một khoảng thời gian dài. Không cần thiết phải giới thiệu một thư viện mới chỉ để thực hiện một phép tính đơn giản. minutes = ((milliseconds / 1000) / 60)
Kyle Falconer

2
Điều này dường như là câu trả lời tốt nhất cho Java 5 đến 7.
Sean Barbeau

7
@Sotti Rực rỡ? Điều này không giải quyết câu hỏi! Câu hỏi yêu cầu phút giây, ví dụ như chỉ số của đồng hồ bấm giờ, ví dụ 1 minute 30 secondsCâu trả lời này cung cấp phút hoặc giây chẳng hạn 1 minute 90 seconds.
Basil Bourque

1
Tôi muốn sử dụng nó nhưng với giây là giá trị kép, không phải int, ví dụ 1,5s. Điều này có khả thi không?
Dòng

48

Sau khi chuyển đổi mili thành giây (bằng cách chia cho 1000), bạn có thể sử dụng / 60để nhận giá trị phút và % 60(phần còn lại) để nhận giá trị "giây tính bằng phút".

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

Bạn có thể làm như thế này readyandroid.wordpress.com/…
Android sẵn sàng

25

tl; dr

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

Java 9 trở lên

Trong Java 9 trở lên, hãy tạo Durationvà gọi các to…Partphương thức. Trong trường hợp này: toMinutesParttoSecondsPart.

Ghi lại điểm bắt đầu và điểm dừng của đồng hồ bấm giờ của bạn.

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

Biểu diễn thời gian đã trôi qua trong một Durationđối tượng.

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

Thẩm vấn từng phần, phút và giây.

int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();

Bạn cũng có thể muốn xem liệu đồng hồ bấm giờ của mình có chạy lâu như mong đợi hay không.

Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;

Java 8

Trong Java 8, Durationlớp thiếu to…Partcác phương thức. Bạn sẽ cần phải làm toán như được hiển thị trong các câu trả lời khác.

long entireDurationAsSeconds = d.getSeconds();

Hoặc để Durationlàm toán học.

long minutesPart = d.toMinutes(); 
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;

Xem mã trực tiếp trong IdeOne.com .

Khoảng thời gian: 2016-12-18T08: 39: 34.099Z / 2016-12-18T08: 41: 49.099Z

d.toString (): PT2M15S

d.getSeconds (): 135

Đã trôi qua: 2M 15S

Độ phân giải

FYI, độ phân giải của các nowphương thức đã thay đổi giữa Java 8 và Java 9. Xem Câu hỏi này .

  • Java 9 ghi lại khoảnh khắc với độ phân giải tốt như nano giây. Độ phân giải phụ thuộc vào khả năng của phần cứng máy tính của bạn. Tôi thấy micro giây (sáu chữ số của phần thập phân) trên MacBook Pro Retina với macOS Sierra.
  • Java 8 ghi lại khoảnh khắc chỉ lên đến mili giây. Việc triển khai Clockđược giới hạn ở độ phân giải mili giây. Vì vậy, bạn có thể lưu trữ các giá trị bằng nano giây nhưng chỉ ghi lại chúng trong mili giây.

Giới thiệu về java.time

Khung java.time được tích hợp sẵn trong Java 8 trở lên. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date, Calendar, & SimpleDateFormat.

Để tìm hiểu thêm, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .

Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.

Bạn có thể trao đổi các đối tượng java.time trực tiếp với cơ sở dữ liệu của mình. Sử dụng trình điều khiển JDBC tương thích với JDBC 4.2 trở lên. Không cần chuỗi, không cần java.sql.*lớp.

Lấy các lớp java.time ở đâu?

Bảng sử dụng thư viện java.time với phiên bản Java hoặc Android nào


cho cuộc gọi android đòi hỏi mức api 26.
killer

@Killer Đối với Android cũ hơn, hãy xem các dự án ThreeTen-BackportThreeTenABP .
Basil Bourque

12

Đây chỉ là toán học cơ bản. 1000 mili giây = 1 giây và 60000 mili giây = 1 phút; Vì vậy, chỉ cần làm,

int seconds=(millis/1000)%60;

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

15
Có một sai lầm - dòng thứ hai phải là(millis/1000-seconds)/60
Nayuki

9

Tôi đang tạo ứng dụng máy nghe nhạc mp3 cho android, vì vậy tôi đã làm như thế này để lấy thời gian và thời lượng hiện tại

 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

Đây là chương trình đầy đủ

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

}
}

Tôi tìm thấy chương trình này ở đây " Liên kết " ở đó nó được giải thích chi tiết.


1
Điều này không giải quyết Câu hỏi . Câu hỏi yêu cầu phút giây, như một chỉ số của đồng hồ bấm giờ. Bạn cho hai kết quả riêng biệt, phút hoặc seconds.d
Basil Bourque

6

X mili giây = X / 1000 giây = (X / 1000) / 60 phút

Nếu bạn có 100.000 mili giây, hãy chia giá trị này cho 1.000 và bạn còn lại 100 giây. Bây giờ 100/60 = 1,666 ~ phút, nhưng phút phân số không có giá trị, do đó: thực hiện 100% 60 = 40 giây để tìm phần dư, sau đó chia số nguyên 100/60 = 1 phút, với 40 giây dư. Trả lời: 1 phút 40 giây.


5

Để chuyển đổi trực tiếp thời gian tính bằng mili sang phút: định dạng thứ hai, bạn có thể sử dụng định dạng này

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

Điều này sẽ trả về một chuỗi có thời gian ở định dạng thích hợp. Nó đã làm việc cho tôi.


Ahah, hay lắm! Tôi vừa thử nghiệm trên bộ đếm thời gian tính bằng mili giây và đã hoạt động!
esQmo_

5

Để có giờ, phút và giây thực tế xuất hiện trên đồng hồ, hãy thử mã này

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

5

Bạn có thể thử tiếp tục theo cách này:

Chuyển giá trị ms từ

Long ms = watch.getTime();

đến

getDisplayValue(ms)

Triển khai 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"
}

Triển khai 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);
  }

Thử nghiệm

long delay = 1000*60*20 + 1000*5 + 10;
LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));

Đầu ra

INFO: Delay Expected 00 days - 00:20:05.010

3

Tôi không nghĩ rằng Java 1.5 hỗ trợ TimeUnit đồng thời. Nếu không, tôi sẽ đề xuất cho TimeUnit. Dưới đây là dựa trên phương pháp toán học thuần túy.

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

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

1

Bạn có thể dễ dàng chuyển đổi mili giây thành giây, phút và giờ.

                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

Đoạn mã dưới đây thực hiện công việc chuyển đổi ms thành min: secs với định dạng [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

Đây là một giải pháp đơn giản. Các lệnh gọi mẫu có thể được sử dụng trong bất kỳ phương thức nào:

  • StopWatch.start();
  • StopWatch.stop();
  • StopWatch.displayDiff();hiển thị sự khác biệt trong phút và giây giữa bắt đầu và dừng. (thời gian đã trôi qua)

    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
Sai. Các toMillisphương pháp báo cáo toàn bộ thời gian như mili giây.
Basil Bourque
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.