如何使用joda时间将固定数量的毫秒格式化为hh:mm:ss?

Max*_*ler 2 java formatting datetime jodatime

我有输入,34600毫秒我想以格式00:00:34(HH:MM:SS)输出.

我应该在JDK/Joda时间看哪些课程?我需要这个是有效的,最好是线程安全的,以避免每次解析时的对象创建.

谢谢.

- 编辑 -

使用此代码生成时区敏感结果,如何确保格式化是"自然的",即使用绝对值.

import java.util.Locale;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;


public class Test {
    public static void main(String[] args) {
        DateTimeFormatter fmt = DateTimeFormat.forPattern("kk:mm:ss").withLocale(new Locale("UTC"));
        System.out.println(fmt.print(34600));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果在02:00:34 - + 2h是因为我的时区是GMT + 2.而预期的输出是00:00:34.

Rob*_*ska 10

对于Joda解决方案,请尝试一下(给出更新的问题):

PeriodFormatter fmt = new PeriodFormatterBuilder()
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendHours()
        .appendSeparator(":")
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendMinutes()
        .appendSeparator(":")
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendSeconds()
        .toFormatter();
Period period = new Period(34600);
System.out.println(fmt.print(period));
Run Code Online (Sandbox Code Playgroud)

输出:

00:00:34
Run Code Online (Sandbox Code Playgroud)

关于您对线程安全的偏好:

PeriodFormatterBuilder本身是可变的而不是线程安全的,但它构建的格式化程序是线程安全且不可变的.

(来自PeriodFormatterBuilder文档)