মিলিসেকেন্ডগুলি কীভাবে "এইচএইচ: মিমি: এসএস" ফর্ম্যাটে রূপান্তর করবেন?


184

আমি বিভ্রান্ত এই থ্রেডে হোঁচট খাওয়ার পরে , আমি ফর্ম্যাট থাকা একটি কাউন্টডাউন টাইমারকে কীভাবে ফর্ম্যাট করব তা জানার চেষ্টা করেছি hh:mm:ss

এখানে আমার চেষ্টা -

//hh:mm:ss
String.format("%02d:%02d:%02d", 
    TimeUnit.MILLISECONDS.toHours(millis),
    TimeUnit.MILLISECONDS.toMinutes(millis) - 
    TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));   

সুতরাং, আমি যখন একটি মান চেষ্টা করি তখন আমি 3600000msপাই 01:59:00যা যা হওয়া উচিত তাই এটি ভুল 01:00:00। স্পষ্টতই আমার যুক্তিতে কিছু ভুল আছে, তবে এই মুহূর্তে আমি দেখতে পাচ্ছি না এটি কী!

কেউ সাহায্য করতে পারেন?

সম্পাদনা করুন -

ঠিক কর. ফর্ম্যাট করতে মিলিসেকেন্ডগুলি hh:mm:ssবিন্যাস করার জন্য এখানে সঠিক উপায় -

//hh:mm:ss
String.format("%02d:%02d:%02d", 
    TimeUnit.MILLISECONDS.toHours(millis),
    TimeUnit.MILLISECONDS.toMinutes(millis) - 
    TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
    TimeUnit.MILLISECONDS.toSeconds(millis) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));

সমস্যা ছিল এই TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))পরিবর্তে এটি করা উচিত ছিল ।


1
3,600,000 মিলিসেকেন্ডগুলি 3,600 সেকেন্ড বা 60 মিনিট বা 1 ঘন্টা। এটি হওয়া উচিত নয় 00:59:59, এটি হওয়া উচিত 01:00:00
বোরিলিড

উত্তর:


354

আপনি সত্যিই কাছাকাছি ছিল:

String.format("%02d:%02d:%02d", 
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) -  
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), // The change is in this line
TimeUnit.MILLISECONDS.toSeconds(millis) - 
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));   

আপনি ঘন্টার পরিবর্তে কয়েক মিনিট ব্যবহার করে ঘন্টাকে মিলিসেকেন্ডে রূপান্তর করছিলেন ।

বিটিডাব্লু, আমি আপনার TimeUnitএপিআই এর ব্যবহার পছন্দ করি :)

এখানে কিছু পরীক্ষার কোড দেওয়া হল:

public static void main(String[] args) throws ParseException {
    long millis = 3600000;
    String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
            TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
    System.out.println(hms);
}

আউটপুট:

01:00:00

আমি বুঝতে পেরেছি যে আমার উপরের কোডটি বিয়োগের পরিবর্তে একটি মডুলাস বিভাগ ব্যবহার করে খুব সহজ করা যেতে পারে:

String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
    TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1),
    TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));

এখনও TimeUnitসমস্ত যাদু মানগুলির জন্য এপিআই ব্যবহার করছে এবং ঠিক একই আউটপুট দেয়।


2
আমেন পথে মত TimeUnit API ব্যবহার :)
Dheeraj ভাস্কর

2
চাকাটি পুনর্নবীকরণ করা ভাল ধারণা নয়! ট্রাইটন ম্যানের উত্তরটি আরও ভাল সমাধান।
মোহাম্মদবাখার

5
@ محمدباقر তবে অন্য উত্তরটি একটি বাহ্যিক গ্রন্থাগার ব্যবহার করে, যেখানে আমার কোডটি মূল জেডিকেই ব্যবহার করে। এটি আপনার প্রয়োজনীয়তাগুলির উপর নির্ভর করে - উদাহরণস্বরূপ আপনি কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করতে পারবেন না। অন্য উত্তর যদিও ভাল।
বোহেমিয়ান

2
@ ওজুফ যোগ করুন .replaceAll("^00:", "")বা .replaceAll("^00:(00:)?", "")কয়েক মিনিট পাশাপাশি ঘন্টা দুটোই শূন্য হলে অপসারণ করুন ।
বোহেমিয়ান

2
@ ওজুফ আপনি পাবেন "15:00"এবং "10:00:23"যথাক্রমে; ইনপুট শুরুর জন্য ম্যাচটি নোঙ্গর করা হওয়ায় কেবল শীর্ষস্থানীয় জিরোগুলি সরানো হবে ^
বোহেমিয়ান

77

এর জন্য জেনেরিক পদ্ধতিটি মোটামুটি সহজ:

public static String convertSecondsToHMmSs(long seconds) {
    long s = seconds % 60;
    long m = (seconds / 60) % 60;
    long h = (seconds / (60 * 60)) % 24;
    return String.format("%d:%02d:%02d", h,m,s);
}

1
@ জাভমান59, আপনি কি String.format("% 02 বলছেন d:%02d:%02d", h,m,s)?
কারেনআনে

2
@KarenAnne। এটি আপনি চান কিনা তার উপর নির্ভর করে, উদাহরণস্বরূপ, "03:59:59" বা "3:59:59"।
স্টিফেন হোস্টিং

2
সময়টি মিলি সেকেন্ডে, আপনাকে 1000 দিয়ে সেকেন্ডে গুন করতে হবে
অপূর্ব

5
লেখক সেকেন্ড নয়, মিলিসেকেন্ড সম্পর্কে জিজ্ঞাসা করলেন!
ব্যবহারকারী 924

59

যদি আপনি অ্যাপাচি কমন্স ব্যবহার করেন:

DurationFormatUtils.formatDuration(timeInMS, "HH:mm:ss,SSS");

4
শর্টকাট:DurationFormatUtils.formatDurationHMS(timeInMS);
অ্যারনিইনা

@ জর্জেসিস কেন তারা অপ্রচলিত?
পাইওয়েজান

তারা অপ্রচলিত হয় না।
ত্রিটন ম্যান

26

আমি এটি ব্যবহার করেছি:

String.format("%1$tH:%1$tM:%1$tS.%1$tL", millis);

শ্রেণীর বিবরণ দেখুন বিন্যাসের

2400 এমএসের ইনপুট ব্যবহার করে রানযোগ্য উদাহরণ দেখুন ।


এটি কাজ করছে না বলে মনে হচ্ছে, আমি কেবল এটি 100, 1000, 1200 পাসের মাধ্যমে পরীক্ষা করি এবং এটি 05:30:00 , 05:30:01 , 05:30:01 হিসাবে প্রতিক্রিয়া জানায়
CoDe

2
@ কোড, এটি আপনার সময় অঞ্চলের জন্য কাজ করে। আপনাকে অবশ্যই ইউটিসির চেয়ে আলাদা টাইম জোনে থাকতে হবে। String.format()সময় অঞ্চল নির্ভর । আদর্শ সঠিক উত্তরটি অবশ্য সময় অঞ্চলকে স্বতন্ত্র হওয়া উচিত ।
ডেরেক মাহর

@ কোডি, এটি এমন সময় দেখায় যা আপনার সময় অঞ্চলের সাথে সামঞ্জস্য হয় যা অবশ্যই ইউটিসির চেয়ে আলাদা হওয়া উচিত। String.format()সময় অঞ্চল নির্ভর । আদর্শ সঠিক উত্তরটি অবশ্য সময় অঞ্চলকে স্বতন্ত্র হওয়া উচিত ।
ডেরেক মাহর

25
// New date object from millis
Date date = new Date(millis);
// formattter 
SimpleDateFormat formatter= new SimpleDateFormat("HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
// Pass date object
String formatted = formatter.format(date );

1200 এমএস এর ইনপুট ব্যবহার করে রানযোগ্য উদাহরণ দেখুন ।


3
এটি একটি দিনের চেয়ে বেশি পরিমাণের জন্য ভুল ফলাফল তৈরি করবে। এটি ২৩ থেকে পিছনে ০ পর্যন্ত ঘন্টার সংখ্যাটি মোড়বে যা সম্ভবত এখানে কাম্য নয়।
কেনস্টার

কোন বন্ধু নয় ... আমি মনে করি এটি এখনও একই কাজ করবে। আজকের তারিখ দিয়ে চেষ্টা করুন
বিনয় লোধা

1
সিম্পলডেটফর্ম্যাট এসডিএফ = নতুন সিম্পলডেটফর্ম্যাট ("এইচএইচ: মিমি আ"); যদি কেউ সকাল / বিকাল সহ 12 ঘন্টা ফর্ম্যাটে চায়
অজজি

14
DateFormat df = new SimpleDateFormat("HH:mm:ss");
String formatted = df.format(aDateObject);

1
1 দিনের উপরের সময়কালের জন্য একই সমস্যার সাথে স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 9027317/… হিসাবে একই উত্তর
ওয়ানওয়ার্ল্ড

এটি টাইম জোনের উপর নির্ভরশীল যার অর্থ বিভিন্ন সময় অঞ্চলগুলিতে চালিত হওয়ার পরে ফলাফলটি পৃথক হবে।
ডেরেক মাহর

10

4 টি বাস্তবায়নের জন্য পরীক্ষার ফলাফল

বিশাল ডেটার জন্য প্রচুর ফর্ম্যাটিং করার জন্য, সর্বোত্তম পারফরম্যান্সের প্রয়োজন ছিল, সুতরাং এখানে (আশ্চর্যজনক) ফলাফলগুলি রয়েছে:

(int i = 0; i <1000000; i ++) এর জন্য UN FUNCTION_CALL}

মেয়াদের:

  • সংমিশ্রণ ফর্ম্যাটটার : 196 মিলিস
  • ফর্ম্যাটডিউরেশন: 272 মিলিস
  • অ্যাপাচি ফরমেট: 754 মিলিস
  • formatTimeUnit: 2216 মিলিস

    public static String apacheFormat(long millis) throws ParseException {
        return DurationFormatUtils.formatDuration(millis, "HH:mm:ss");
    }
    
    public static String formatTimeUnit(long millis) throws ParseException {
    String formatted = String.format(
            "%02d:%02d:%02d",
            TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis)
                    - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
            TimeUnit.MILLISECONDS.toSeconds(millis)
                    - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        return formatted;
    }
    
    public static String formatDuration(final long millis) {
        long seconds = (millis / 1000) % 60;
        long minutes = (millis / (1000 * 60)) % 60;
        long hours = millis / (1000 * 60 * 60);
    
        StringBuilder b = new StringBuilder();
        b.append(hours == 0 ? "00" : hours < 10 ? String.valueOf("0" + hours) : 
        String.valueOf(hours));
        b.append(":");
        b.append(minutes == 0 ? "00" : minutes < 10 ? String.valueOf("0" + minutes) :     
        String.valueOf(minutes));
        b.append(":");
        b.append(seconds == 0 ? "00" : seconds < 10 ? String.valueOf("0" + seconds) : 
        String.valueOf(seconds));
        return b.toString();
    }
    
    public static String combinationFormatter(final long millis) {
        long seconds = TimeUnit.MILLISECONDS.toSeconds(millis)
                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis));
        long minutes = TimeUnit.MILLISECONDS.toMinutes(millis)
                - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis));
        long hours = TimeUnit.MILLISECONDS.toHours(millis);
    
        StringBuilder b = new StringBuilder();
        b.append(hours == 0 ? "00" : hours < 10 ? String.valueOf("0" + hours) : 
        String.valueOf(hours));
        b.append(":");
        b.append(minutes == 0 ? "00" : minutes < 10 ? String.valueOf("0" + minutes) : 
        String.valueOf(minutes));
            b.append(":");
        b.append(seconds == 0 ? "00" : seconds < 10 ? String.valueOf("0" + seconds) : 
        String.valueOf(seconds));
        return b.toString(); 
     }

এই মত মেট্রিক কতটা নির্ভরযোগ্য? আমি সত্যিই প্রক্রিয়া বুঝতে পারি না।
মের

আমার পরিস্থিতিতে যেখানে কয়েক হাজার বস্তু পর পর তৈরি করা হয়, আমি মনে করি এই পরীক্ষাটি বেশ কার্যকর। ঠিক আছে কেবল কিছু স্ট্রিং সেট করে দিচ্ছেন না, তবে এমন ক্ষেত্র তৈরি করুন যার একটি ক্ষেত্রের বিন্যাসযুক্ত স্ট্রিং রয়েছে।
মারিউসা

@ এমরিয়াস আপনি ব্যবহার StringBuilderকরতে সমস্যায় পড়েছেন তারপর "0" + নম্বর ধরণের "ধ্বংসাবশেষ" ব্যবহার করে ভুল করুন। @mre JVM- র জিসি প্রচুর স্বল্প-স্থায়ী বস্তু বরাদ্দ এবং সংগ্রহ করতে অত্যন্ত ভাল, সেখানে কোনও উদ্বেগ নেই। আমি String.formatমোকাবেলায় কোনও শীর্ষস্থানীয় শূন্য যুক্তি নিয়ে যাইনি।
এসএসএল-এলএলসি

6

বোহেমিয়ার উত্তরটি অনুসরণ করে আমাদের একটি প্রয়োজনীয় মান খুঁজে পেতে টাইমউনাইট ব্যবহার করা দরকার না। আরও অনেক বেশি অনুকূল কোড হবে

String hms = String.format("%02d:%02d:%02d", millisLeft/(3600*1000),
                    millisLeft/(60*1000) % 60,
                    millisLeft/1000 % 60);

আশা করি এটা সাহায্য করবে


আপনার উত্তরটি সবচেয়ে বেশি পছন্দ করুন! শুধু সহজ গণিত। বিটিডব্লু আমার ক্ষেত্রে আমি মিলিসেকেন্ডগুলি শেষের সাথে যুক্ত করেছি millisLeft%1000/10যাতে আমরা ফর্ম্যাটটি পাইhour:minutes:seconds:milliseconds
Lê Quang Duy

@ ল্যাকুয়াংডুয়ির আমার কাছে ০১: ২৪: ৫১,123 এর মতো 3 ডিজিটে মিলিসেকেন্ড দরকার তবে আপনার কী করা উচিত শেষ পর্যন্ত 3 টি কেটে নিচ্ছেন?
নানু

@ নানু কেবল ব্যবহার করুনmillisLeft%1000
লু কোয়াং

6
 public String millsToDateFormat(long mills) {

    Date date = new Date(mills);
    DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
    String dateFormatted = formatter.format(date);
    return dateFormatted; //note that it will give you the time in GMT+0
}

উত্তর টাইম জোনের উপর নির্ভরশীল যার অর্থ বিভিন্ন সময় অঞ্চলগুলিতে চালিত হওয়ার পরে ফলাফলটি পৃথক হবে।
ডেরেক মাহর

6

এটি আমার পক্ষে, কোটলিনের সাথে কাজ করেছিল

fun formatToDigitalClock(miliSeconds: Long): String {
        val hours = TimeUnit.MILLISECONDS.toHours(miliSeconds).toInt() % 24
        val minutes = TimeUnit.MILLISECONDS.toMinutes(miliSeconds).toInt() % 60
        val seconds = TimeUnit.MILLISECONDS.toSeconds(miliSeconds).toInt() % 60
        return when {
            hours > 0 -> String.format("%d:%02d:%02d", hours, minutes, seconds)
            minutes > 0 -> String.format("%02d:%02d", minutes, seconds)
            seconds > 0 -> String.format("00:%02d", seconds)
            else -> {
                "00:00"
            }
        }
    }

আমার জন্য নিখুঁতভাবে কাজ করেছেন। এটি সর্বোত্তম উত্তর হওয়া উচিত যেহেতু এটি শূন্য ঘন্টা পরিচালনা করে
vNext

6

জাভা 9

    Duration timeLeft = Duration.ofMillis(3600000);
    String hhmmss = String.format("%02d:%02d:%02d", 
            timeLeft.toHours(), timeLeft.toMinutesPart(), timeLeft.toSecondsPart());
    System.out.println(hhmmss);

এই মুদ্রণ:

01:00:00

আপনি লাইব্রেরি পদ্ধতিতে আপনার জন্য জড়িত রূপান্তরগুলি করতে সঠিকভাবে করছেন। java.time, আধুনিক জাভা তারিখ এবং সময় এপিআই, বা আরও সুনির্দিষ্টভাবে বলা যায়, এর Durationশ্রেণিটি এটি আরও মার্জিত ও কম ত্রুটি-প্রবণ উপায়ে করে TimeUnit

toMinutesPartএবং toSecondsPartপদ্ধতি আমি ব্যবহার জাভা 9 ব্যবস্থা চালু হয়েছে।

জাভা 6, 7 এবং 8

    long hours = timeLeft.toHours();
    timeLeft = timeLeft.minusHours(hours);
    long minutes = timeLeft.toMinutes();
    timeLeft = timeLeft.minusMinutes(minutes);
    long seconds = timeLeft.toSeconds();
    String hhmmss = String.format("%02d:%02d:%02d", hours, minutes, seconds);
    System.out.println(hhmmss);

আউটপুট উপরের মত একই।

প্রশ্ন: কিভাবে জাভা 6 এবং 7 এ কাজ করতে পারে?

  • জাভা 8 এবং তারপরে এবং আরও নতুন অ্যান্ড্রয়েড ডিভাইসে (এপিআই স্তর 26 থেকে, আমাকে বলা হয়েছে) java.time অন্তর্নির্মিত আসে।
  • জাভা 6 এবং 7-এ থ্রিটেন ব্যাকপোর্ট, আধুনিক ক্লাসগুলির ব্যাকপোর্ট (জেএসআর 310 এর জন্য থ্রিডেন; নীচের লিঙ্কগুলি দেখুন) পান।
  • (পুরানো) অ্যান্ড্রয়েড থ্রিটেন ব্যাকপোর্টের অ্যান্ড্রয়েড সংস্করণ ব্যবহার করে। একে থ্রিটেনএবিপি বলে। এবং org.threeten.bpসাব-প্যাকেজগুলি সহ আপনি তারিখ এবং সময় ক্লাসগুলি আমদানি করেছেন তা নিশ্চিত করুন ।

লিংক


5

নীচের কোডটি উভয় উপায়ে রূপান্তর করে

23: 59: 58: 999 থেকে 86398999 এ

এবং চেয়ে

86398999 থেকে 23: 59: 58: 999


import java.util.concurrent.TimeUnit;

public class TimeUtility {

    public static void main(String[] args) {

        long currentDateTime = System.currentTimeMillis();

        String strTest = "23:59:58:999";
        System.out.println(strTest);

        long l = strToMilli(strTest);
        System.out.println(l);
        l += 1;
        String str = milliToString(l);
        System.out.println(str);
    }

    /**
     * convert a time string into the equivalent long milliseconds
     *
     * @param strTime string fomratted as HH:MM:SS:MSMS i.e. "23:59:59:999"
     * @return long integer like 86399999
     */
    public static long strToMilli(String strTime) {
        long retVal = 0;
        String hour = strTime.substring(0, 2);
        String min = strTime.substring(3, 5);
        String sec = strTime.substring(6, 8);
        String milli = strTime.substring(9, 12);
        int h = Integer.parseInt(hour);
        int m = Integer.parseInt(min);
        int s = Integer.parseInt(sec);
        int ms = Integer.parseInt(milli);

        String strDebug = String.format("%02d:%02d:%02d:%03d", h, m, s, ms);
        //System.out.println(strDebug);
        long lH = h * 60 * 60 * 1000;
        long lM = m * 60 * 1000;
        long lS = s * 1000;

        retVal = lH + lM + lS + ms;
        return retVal;
    }

    /**
     * convert time in milliseconds to the corresponding string, in case of day
     * rollover start from scratch 23:59:59:999 + 1 = 00:00:00:000
     *
     * @param millis the number of milliseconds corresponding to tim i.e.
     *               34137999 that can be obtained as follows;
     *               <p>
     *               long lH = h * 60 * 60 * 1000; //hour to milli
     *               <p>
     *               long lM = m * 60 * 1000; // minute to milli
     *               <p>
     *               long lS = s * 1000; //seconds to milli
     *               <p>
     *               millis = lH + lM + lS + ms;
     * @return a string formatted as HH:MM:SS:MSMS i.e. "23:59:59:999"
     */
    private static String milliToString(long millis) {

        long hrs = TimeUnit.MILLISECONDS.toHours(millis) % 24;
        long min = TimeUnit.MILLISECONDS.toMinutes(millis) % 60;
        long sec = TimeUnit.MILLISECONDS.toSeconds(millis) % 60;
        //millis = millis - (hrs * 60 * 60 * 1000); //alternative way
        //millis = millis - (min * 60 * 1000);
        //millis = millis - (sec * 1000);
        //long mls = millis ;
        long mls = millis % 1000;
        String toRet = String.format("%02d:%02d:%02d:%03d", hrs, min, sec, mls);
        //System.out.println(toRet);
        return toRet;
    }
}

আমি এই সমাধান upvmitted। সেকেন্ড এবং এমএলএসের মধ্যে কেবল একটি বিন্দু রাখুন। এবং আমি জানি না কেন জাভাতে সময় এবং তারিখ পরিচালনা করা খুব কঠিন। সর্বাধিক ব্যবহৃত ফাংশনগুলি ইতিমধ্যে উপলব্ধ এবং শ্রেণীর অংশ হওয়া উচিত।
বারুচ আত্তা

5
        String string = String.format("%02d:%02d:%02d.%03d",
            TimeUnit.MILLISECONDS.toHours(millisecend), TimeUnit.MILLISECONDS.toMinutes(millisecend) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisecend)),
            TimeUnit.MILLISECONDS.toSeconds(millisecend) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisecend)), millisecend - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisecend)));

ফর্ম্যাট: 00: 00: 00.000

উদাহরণ: 615605 মিলিচেন্ডি

00: 10: 15,605


5

সঠিক হিসাবে চিহ্নিত উত্তরের কিছুটা ভুল হয়েছে,

String myTime = String.format("%02d:%02d:%02d",
            TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis) -
                    TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), // The change is in this line
            TimeUnit.MILLISECONDS.toSeconds(millis) -
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

উদাহরণস্বরূপ, আমি যে মূল্য পাই এটি একটি উদাহরণ:

417474:44:19

সঠিক ফর্ম্যাটটি পাওয়ার সমাধানটি হ'ল:

String myTime =  String.format("%02d:%02d:%02d",
                //Hours
                TimeUnit.MILLISECONDS.toHours(millis) -
                        TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millis)),
                //Minutes
                TimeUnit.MILLISECONDS.toMinutes(millis) -
                        TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                //Seconds
                TimeUnit.MILLISECONDS.toSeconds(millis) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

ফলস্বরূপ একটি সঠিক ফর্ম্যাট হচ্ছে:

18:44:19

বিন্যাসটি পেতে অন্য বিকল্পটি hh:mm:ssকেবলমাত্র:

   Date myDate = new Date(timeinMillis);
   SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
   String myTime = formatter.format(myDate);

4

আমি প্রথম উত্তরে প্রদর্শিত হিসাবে চেষ্টা করেছি। এটি কাজ করে, তবে বিয়োগ আমাকে বিভ্রান্তিতে ফেলেছে। গ্রোভির আমার উত্তর:

import static java.util.concurrent.TimeUnit.*

...

private static String formatElapsedTime(long millis) {

    int hrs = MILLISECONDS.toHours(millis) % 24
    int min = MILLISECONDS.toMinutes(millis) % 60
    int sec = MILLISECONDS.toSeconds(millis) % 60
    int mls = millis % 1000

    sprintf( '%02d:%02d:%02d (%03d)', [hrs, min, sec, mls])
}

3

কোটলিনের জন্য

val hours = String.format("%02d", TimeUnit.MILLISECONDS.toHours(milSecs))
val minutes = String.format("%02d",
                        TimeUnit.MILLISECONDS.toMinutes(milSecs) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milSecs)))
val seconds = String.format("%02d",
                        TimeUnit.MILLISECONDS.toSeconds(milSecs) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milSecs)))

যেখানে, milSecsমিলি সেকেন্ড


1

ঠিক আছে, আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন:

public String getElapsedTimeHoursMinutesSecondsString() {       
     long elapsedTime = getElapsedTime();  
     String format = String.format("%%0%dd", 2);  
     elapsedTime = elapsedTime / 1000;  
     String seconds = String.format(format, elapsedTime % 60);  
     String minutes = String.format(format, (elapsedTime % 3600) / 60);  
     String hours = String.format(format, elapsedTime / 3600);  
     String time =  hours + ":" + minutes + ":" + seconds;  
     return time;  
 }  

মিলিসেকেন্ডগুলিকে একটি সময়ের মানতে রূপান্তর করতে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.