比较 MM:SS 格式的两个时间

我希望以 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 格式,是否有任何其他方法可以让我获得预期的输出。


森栏
浏览 114回答 4
4回答

红颜莎娜

由于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

慕妹3242003

    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分钟。这是两个参数之间的时间差。

喵喵时光机

您可能使用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,我使用正则表达式将字符串转换为这种格式。输出与之前相同。

手掌心

问题是你不能有一个只有分钟和秒的格式化程序,小时是强制性的。一种可能的方法是在字符串前面添加默认小时: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java