it-swarm.asia

تحويل ميلي ثانية إلى دقائق وثواني؟

لقد ألقيت نظرة على الأسئلة السابقة ، لكن لا أحد لديه الإجابة التي كنت أبحث عنها. كيف يمكنني تحويل ميلي ثانية من أسلوب StopWatch إلى الدقائق والثواني؟ لدي:

 watch.start();

لبدء ساعة توقيت و

  watch.stop();

لإيقاف الساعة. لدي في وقت لاحق

  watch.getTime();

التي ترجع ميلي ثانية. أريده أن يعود بالثواني والدقائق. كيف يمكنني القيام بذلك؟ أنا أبحث عن طريقة للقيام بذلك دون ضرب/قسمة على 1000 ولكن بدلاً من ذلك طريقة تجعل الحساب بأكمله أكثر قابلية للقراءة وأقل عرضة للخطأ.

62
Trevor

أود أن أقترح استخدام TimeUnit. يمكنك استخدامه مثل هذا:

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

بعد تحويل المللي ثانية إلى الثواني (عن طريق القسمة على 1000) ، يمكنك استخدام / 60 للحصول على قيمة الدقائق ، و % 60 (البقية) للحصول على قيمة "الثواني في الدقيقة".

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

هذا هو مجرد الرياضيات الأساسية. 1000 ميلي ثانية = 1 ثانية و 60000 ميلي ثانية = 1 دقيقة ؛ لذلك فقط ،

int seconds=(millis/1000)%60;

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

ليرة تركية، والدكتور

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

جافا 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

القرار

لمعلوماتك ، تم تغيير طرق now بين Java 8 و Java 9. راجع هذا السؤال .

  • Java 9 يلتقط اللحظة بدقة عالية مثل النانوثانية. يعتمد الدقة على قدرة أجهزة الكمبيوتر. أرى microseconds (ستة أرقام من الكسر العشري) على MacBook Pro Retina مع macOS Sierra.
  • Java 8 يلتقط اللحظة فقط حتى ميلي ثانية. تطبيق Clock يقتصر على دقة المللي ثانية. لذلك يمكنك store القيم بالنانو ثانية ولكن فقط {الالتقاط بالمللي ثانية.
9
Basil Bourque

هنا هو البرنامج الكامل

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

}
}

لقد وجدت هذا البرنامج هنا " Link " هناك يتم شرح ذلك بالتفصيل.

6
Ashish Yadav

كنت أقوم بإنشاء تطبيق مشغل 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;
}
5
Jeeva

ميلي ثانية واحدة = X/1000 ثانية = (X/1000)/60 دقيقة

إذا كان لديك 100000 مللي ثانية ، فقم بتقسيم هذه القيمة على 1000 وترك 100 ثانية. الآن 100/60 = 1.666 ~ دقيقة ، لكن الدقائق الكسرية ليس لها قيمة ، لذلك: قم بإجراء 100٪ 60 = 40 ثانية للعثور على الباقي ، ثم قسمة الأعداد الصحيحة 100/60 = 1 دقيقة ، مع 40 ثانية متبقية. الجواب: 1 دقيقة ، 40 ثانية.

4
Kon

للحصول على ساعة ودقيقة وثانية حقيقية كما تظهر على الشاشة ، جرب هذا الرمز

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

يمكنك محاولة المتابعة بهذه الطريقة:

تمرير قيمة مللي من

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"
}
3
Irwin Nawrocki

لا أعتقد أن Java 1.5 يدعم TimeUnit المتزامن. خلاف ذلك ، أود أن أقترح ل TimeUnit. أدناه يعتمد على نهج الرياضيات البحتة.

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

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

لتحويل الوقت بالميليس مباشرة إلى دقائق: يمكنك استخدام هذا التنسيق الثاني

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

هذا سيعود سلسلة مع مرور الوقت في التنسيق السليم. عملت معي.

2
Priyankchoudhary

هنا حل بسيط. مثال على المكالمات التي يمكن استخدامها في أي طريقة:

  • 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");
        }
    }
    
0
R.Lansing
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();
    }
}
0
Keshav Gera