วิธีแปลงมิลลิวินาทีเป็นรูปแบบ“ hh: mm: ss”


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
Borealid

คำตอบ:


355

คุณสนิทจริงๆ :

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

คุณได้รับการแปลงชั่วโมงในการใช้ millisseconds นาทีแทนชั่วโมง

BTW ฉันชอบการใช้TimeUnitAPI ของคุณ :)

นี่คือรหัสทดสอบบางส่วน:

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

ยังคงใช้TimeUnitAPI สำหรับค่าเวทย์มนตร์ทั้งหมดและให้ผลลัพธ์เหมือนกันทุกประการ


2
สาธุเช่นวิธีการใช้งาน API TIMEUNIT :)
Dheeraj Bhaskar

2
มันไม่ใช่ความคิดที่ดีที่จะคิดค้นล้อใหม่! คำตอบของ Triton Man เป็นทางออกที่ดีกว่า
محمدباقر

5
@ محمدباقر แต่คำตอบอื่น ๆ ใช้ไลบรารีภายนอกในขณะที่รหัสของฉันใช้ core JDK เท่านั้น ขึ้นอยู่กับความต้องการของคุณ - ตัวอย่างเช่นคุณอาจไม่สามารถใช้ห้องสมุดภายนอก คำตอบอื่น ๆ เป็นสิ่งที่ดีแม้ว่า
โบฮีเมียน

2
@Ozuf เพิ่ม.replaceAll("^00:", "")หรือ.replaceAll("^00:(00:)?", "")ลบนาทีและชั่วโมงหากทั้งคู่เป็นศูนย์
โบฮีเมียน

2
@Ozuf คุณได้รับ"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
@ Javaman59 คุณหมายถึงString.format("% 02 d:%02d:%02d", h,m,s)หรือไม่
KarenAnne

2
@KarenAnne ขึ้นอยู่กับว่าคุณต้องการเช่น "03:59:59" หรือ "3:59:59"
Stephen Hosking

2
เวลาเป็นมิลลิวินาทีคุณต้องคูณวินาทีด้วย 1,000
Apurva

5
ผู้เขียนถามเกี่ยวกับมิลลิวินาทีไม่ใช่วินาที!
user924


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
@CoDe ใช้ได้กับเขตเวลาของคุณ คุณต้องอยู่ในเขตเวลาที่แตกต่างจาก UTC String.format()เป็นโซนเวลาขึ้นอยู่กับ เหมาะตอบที่ถูกต้อง แต่ควรจะเป็นโซนเวลาอิสระ
Derek Mahar

@CoDe แสดงเวลาที่สอดคล้องกับเขตเวลาของคุณซึ่งต้องแตกต่างจาก UTC String.format()เป็นโซนเวลาขึ้นอยู่กับ เหมาะตอบที่ถูกต้อง แต่ควรจะเป็นโซนเวลาอิสระ
Derek Mahar

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

ดูตัวอย่าง runnableโดยใช้อินพุต 1200 ms


3
สิ่งนี้จะให้ผลลัพธ์ที่ไม่ถูกต้องสำหรับจำนวนเวลามากกว่าหนึ่งวัน มันจะตัดจำนวนชั่วโมงจาก 23 กลับเป็น 0 ซึ่งอาจไม่เป็นที่ต้องการที่นี่
Kenster

ไม่มีเพื่อน ... ฉันคิดว่ามันจะยังคงทำงานเหมือนเดิม ลองกับวันนี้วันที่
Vinay Lodha

1
SimpleDateFormat sdf = ใหม่ SimpleDateFormat ("hh: mm aa"); ในกรณีที่บางคนต้องการในรูปแบบ 12 ชั่วโมงด้วย am / pm
Ajji

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

1
คำตอบเดียวกับstackoverflow.com/questions/9027317/ …ที่มีปัญหาเดียวกันสำหรับระยะเวลาที่สูงกว่า 1 วัน
OneWorld

นอกจากนี้ยังขึ้นอยู่กับเขตเวลาซึ่งหมายความว่าผลลัพธ์จะแตกต่างกันเมื่อทำงานในเขตเวลาที่ต่างกัน
Derek Mahar

10

ผลการทดสอบสำหรับการนำไปใช้งานทั้ง 4 รายการ

ต้องทำการฟอร์แมตเป็นจำนวนมากสำหรับข้อมูลขนาดใหญ่ต้องการประสิทธิภาพที่ดีที่สุดดังนั้นนี่คือผลลัพธ์ที่น่าประหลาดใจ:

สำหรับ (int i = 0; i <1000000; i ++) {FUNCTION_CALL}

ระยะเวลา:

  • ชุดรูปแบบ: 196มิลลิวินาที
  • formatDuration: 272มิลลิวินาที
  • รูปแบบ apache: 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(); 
     }

ความน่าเชื่อถือของเมตริกเป็นอย่างไร ฉันไม่เคยเข้าใจกระบวนการนี้จริงๆ
MRE

ในสถานการณ์ของฉันที่มีวัตถุหลายพันชิ้นถูกสร้างขึ้นอย่างต่อเนื่องการทดสอบนี้ฉันคิดว่ามีประโยชน์ทีเดียว ตกลงไม่ได้ตั้งค่าเพียงบางสตริง แต่การสร้างวัตถุที่มีเขตข้อมูลหนึ่งเป็นสตริงที่จัดรูปแบบ
MariusA

@marius คุณไปพบปัญหาในการใช้งานStringBuilderจากนั้นทำผิดพลาดโดยใช้ "0" + หมายเลขประเภท "ซากปรักหักพัง" @mre GC ของ JVM ดีมากในการจัดสรรและรวบรวมวัตถุระยะสั้นจำนวนมากโดยไม่ต้องกังวล ฉันไปกับString.formatตรรกะที่ไม่มีศูนย์นำที่จะจัดการกับ
escape-llc

6

ไปตามคำตอบของโบฮีเมียเราไม่จำเป็นต้องใช้ TimeUnit เพื่อค้นหาคุณค่าที่รู้จัก รหัสที่เหมาะสมที่สุดจะมากขึ้น

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

หวังว่ามันจะช่วย


ชอบคำตอบของคุณมากที่สุด! คณิตศาสตร์ง่ายๆ Btw ในกรณีของฉันฉันเพิ่มมิลลิวินาทีไปยังจุดสิ้นสุดmillisLeft%1000/10ดังนั้นเราจึงได้รับรูปแบบhour:minutes:seconds:milliseconds
Lê Quang Duy

@ LêQuangDuyฉันต้องการมิลลิวินาทีเป็น 3 หลักเช่น 01: 24: 51,123 แต่การสับของคุณ 3 ในที่สุดจะทำอย่างไร?
naanu

@naanu ใช้เพียงmillisLeft%1000
Lê Quang Duy

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
}

คำตอบขึ้นอยู่กับเขตเวลาซึ่งหมายความว่าผลลัพธ์จะแตกต่างกันเมื่อทำงานในเขตเวลาที่ต่างกัน
Derek Mahar

6

สิ่งนี้ใช้ได้กับฉันด้วย kotlin

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

Java 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.timeAPI วันที่และเวลาของ Java ที่ทันสมัยหรือแม่นยำยิ่งขึ้นDurationคลาสของมันทำอย่างหรูหรามากขึ้นและในทางที่ผิดพลาดน้อยกว่าTimeUnitระดับไม่มันมากขึ้นอย่างหรูหราและในทางที่ผิดพลาดได้ง่ายน้อยกว่า

toMinutesPartและtoSecondsPartวิธีการที่ผมใช้เป็นที่รู้จักใน Java 9

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

เอาต์พุตเหมือนกับด้านบน

คำถาม: มันสามารถทำงานใน Java 6 และ 7 ได้อย่างไร?

  • ใน Java 8 และใหม่กว่าและบนอุปกรณ์ Android รุ่นใหม่กว่า (จาก API ระดับ 26 ฉันบอก) java.timeมาพร้อมกับเครื่อง
  • ใน Java 6 และ 7 จะได้รับ ThreeTen Backport ซึ่งเป็น backport ของคลาสที่ทันสมัย ​​(ThreeTen สำหรับ JSR 310 ดูลิงค์ที่ด้านล่าง)
  • บน (เก่า) Android ใช้ Android รุ่น ThreeTen Backport มันเรียกว่า ThreeTenABP และตรวจสอบให้แน่ใจว่าคุณได้อิมพอร์ตคลาสวันที่และเวลาจาก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;
    }
}

ฉันโหวตโซลูชันนี้ขึ้น เพียงใส่จุดระหว่างวินาทีกับ mls และฉันไม่รู้ว่าทำไมการจัดการเวลาและวันที่เป็นเรื่องยากใน Java ฟังก์ชั่นที่ใช้มากที่สุดควรมีอยู่แล้วและเป็นส่วนหนึ่งของชั้นเรียน
บารุคอัตตา

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 Millisecend

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

ฉันพยายามตามที่แสดงในคำตอบแรก มันใช้งานได้ แต่ลบทำให้ฉันสับสน คำตอบของฉันโดย Groovy:

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

สำหรับ Kotlin

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.