将 JodaTime 持续时间转换为字符串

问题描述 投票:0回答:3

我有一个时长为 127 秒的电影。我想将其显示为

02:07
。实现这一点的最佳方法是什么?

jodatime duration
3个回答
32
投票
Duration yourDuration = //...
Period period = yourDuration.toPeriod();
PeriodFormatter minutesAndSeconds = new PeriodFormatterBuilder()
     .printZeroAlways()
     .appendMinutes()
     .appendSeparator(":")
     .appendSeconds()
     .toFormatter();
String result = minutesAndSeconds.print(period);

26
投票

我自己想要这个,但我发现 lyas 的答案不准确。 我想要一个计数器,当我有 0 小时 1 分钟时,我得到了

0:1
和他的答案 - 但这很容易用一行代码解决!

Period p = time.toPeriod();
PeriodFormatter hm = new PeriodFormatterBuilder()
    .printZeroAlways()
    .minimumPrintedDigits(2) // gives the '01'
    .appendHours()
    .appendSeparator(":")
    .appendMinutes()
    .toFormatter();
String result = hm.print(p);

这会给你

02:07


0
投票

java.time

以下引用来自Joda-Time主页的通知:

请注意,从 Java SE 8 开始,要求用户迁移到 java.time

 (JSR-310) - JDK 的核心部分,它将取代此项目

使用现代日期时间 API

java.time
的解决方案

您可以使用

java.time.Duration

,它以 ISO-8601 标准为模型,并作为 JSR-310 实现的一部分随 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

演示:

import java.time.Duration; public class Main { public static void main(String[] args) { Duration duration = Duration.ofSeconds(127); // Default format System.out.println(duration); // Custom format // ####################################Java-8#################################### String formattedElapsedTime = String.format("%02d:%02d", duration.toMinutes() % 60, duration.toSeconds() % 60); System.out.println(formattedElapsedTime); // ############################################################################## // ####################################Java-9#################################### formattedElapsedTime = String.format("%02d:%02d", duration.toMinutesPart(), duration.toSecondsPart()); System.out.println(formattedElapsedTime); // ############################################################################## } }

输出:

PT2M7S 02:07 02:07

在线演示

Trail:日期时间了解现代日期时间 API。

© www.soinside.com 2019 - 2024. All rights reserved.