亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較 MM:SS 格式的兩個時間

比較 MM:SS 格式的兩個時間

森欄 2023-08-09 15:27:36
我希望以 MM:SS 格式比較兩次,并在幾秒鐘內得到這兩次之間的差異例如時間 1 = 20:28 ,時間 2 = 20:18相差-10秒我嘗試使用以下方法來比較時間        LocalTime start = LocalTime.parse( "20:28" );        LocalTime stop = LocalTime.parse( "20:18" );        Duration duration = Duration.between( start, stop );        System.out.println(duration.getSeconds());實際:這將打印-600秒作為輸出,因為時間以 HH:MM 格式解析。預期的 -10考慮到 MM:SS 格式,是否有任何其他方法可以讓我獲得預期的輸出。
查看完整描述

4 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

由于LocalTime似乎無法使用DateTimeFormatter的模式mm:ss,您還可以創建一個簡短的static輔助方法來調用。


此方法將所有解析的默認時間設置為相同的值,這不會暴露其他任何"00:"地方,如果意外輸入不同的時間,則可能容易出現錯誤。


這將確保任何Duration.between()分鐘和秒都是準確的:


public static void main(String [] args) {

? ? LocalTime start = parseHelper("20:28");

? ? LocalTime stop = parseHelper("20:18");

? ? Duration duration = Duration.between(start, stop);

? ? System.out.println(duration.getSeconds());

}


private static LocalTime parseHelper(String str) {

? ? return LocalTime.parse("00:" + str);

}

輸出:

-10

輸出將是以下 ISO-8601 格式之一:

HH:mm
HH:mm:ss
HH:mm:ss.SSS
HH:mm:ss.SSSSSS
HH:mm:ss.SSSSSSSS


查看完整回答
反對 回復 2023-08-09
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

    LocalTime start = LocalTime.parse( "00:20:28" );

    LocalTime stop = LocalTime.parse( "00:20:18" );

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

    System.out.println(duration.getSeconds());

您以錯誤的方式保存日期。您還必須提供時間。當你傳遞2個參數(20:18)時,它認為第一個為小時,第二個為分鐘。這就是為什么它返回 600 秒。600秒等于10分鐘。這是兩個參數之間的時間差。


查看完整回答
反對 回復 2023-08-09
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您可能使用LocalTime方法不正確。


假設你想要你所說的你想要的,訣竅是定義一個格式化程序,假設一天中的小時為 0。我們需要的parseDefaulting方法是:DateTImeFormatterBuilder


    DateTimeFormatter mmssFormatter = new DateTimeFormatterBuilder()

            .appendPattern("mm:ss")

            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)

            .toFormatter();


    LocalTime start = LocalTime.parse( "20:28", mmssFormatter );

    LocalTime stop = LocalTime.parse( "20:18", mmssFormatter );

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

    System.out.println(duration.getSeconds());

輸出是:


-10


時間字符串被解析為時間 00:20:28 和 00:20:18。我不明白的是,將自己限制在晚上 00:00:00 到 01:00:00 之間的時間有什么意義。相反,如果您的時間相對于某個點(不一定是 00:00),那么使用Duration它們可能更正確。這個想法是,20:28 不是一天中的某個時間,但可以視為測量基準和開始時間之間的持續時間。然后您可以減去持續時間:


    Duration relativeStart = parseDuration("20:28");

    Duration relativeStop = parseDuration("20:18");

    Duration duration = relativeStop.minus(relativeStart);

    System.out.println(duration.getSeconds());

我正在使用這個輔助方法:


private static Duration parseDuration(String timeString) {

    String isoTimeString = timeString.replaceFirst("(\\d{2}):(\\d{2})", "PT$1M$2S");

    return Duration.parse(isoTimeString);

}

由于Duration.parse只能解析 ISO 8601 格式的字符串,例如PT20M28S,我使用正則表達式將字符串轉換為這種格式。


輸出與之前相同。


查看完整回答
反對 回復 2023-08-09
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

問題是你不能有一個只有分鐘和秒的格式化程序,小時是強制性的。一種可能的方法是在字符串前面添加默認小時:


LocalTime start = LocalTime.parse("00:20:28");

LocalTime stop = LocalTime.parse("00:20:18");

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

System.out.println(duration.getSeconds());

輸出:-10


另一種可能的方法是使用of具有默認時間的方法:


LocalTime start = LocalTime.of(0, 20, 28);

LocalTime stop = LocalTime.of(0, 20, 18);

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

System.out.println(duration.getSeconds());

輸出:-10


查看完整回答
反對 回復 2023-08-09
  • 4 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號