gpt4 book ai didi

java - 格式持续时间

转载 作者:行者123 更新时间:2023-11-30 05:51:55 26 4
gpt4 key购买 nike

我花了整个上午试图找到一种方法来实现我最初认为是相对容易的任务:将以数字方式表示的持续时间转换为可读的方式。例如,对于输入 3.5,输出应为“3 年零 6 个月”。

根据我阅读的内容,似乎强烈推荐 Joda Time 库。使用该库并遵循 this post我正在尝试这样的事情:

    Period p = new Period(110451600000L); // 3 years and a half

PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendYears()
.appendSuffix(" year", " years")
.appendSeparator(" and ")
.appendMonths()
.appendSuffix(" month", " months")
.toFormatter();

System.out.println(formatter.print(p));

但是输出什么也没有。不知道为什么它不起作用。

我也试过 Apache DurationFormatUtils , 但不起作用。

有人有想法吗?

提前致谢。

最佳答案

经过一些研究、测试和 benjamin 的帮助,我有一个解决方案:

    DateTime dt = new DateTime(); // Now
DateTime plusDuration = dt.plus(new Duration(110376000000L)); // Now plus three years and a half

// Define and calculate the interval of time
Interval interval = new Interval(dt.getMillis(), plusDuration.getMillis());

// Parse the interval to period using the proper PeriodType
Period period = interval.toPeriod(PeriodType.yearMonthDayTime());

// Define the period formatter for pretty printing the period
PeriodFormatter pf = new PeriodFormatterBuilder()
.appendYears().appendSuffix("y ", "y ")
.appendMonths().appendSuffix("m", "m ").appendDays()
.appendSuffix("d ", "d ").appendHours()
.appendSuffix("h ", "h ").appendMinutes()
.appendSuffix("m ", "m ").appendSeconds()
.appendSuffix("s ", "s ").toFormatter();

// Print the period using the previously created period formatter
System.out.println(pf.print(period).trim());

我发现 Joda-Time 的官方文档非常有用,特别是这篇文章:Correctly defining a duration using JodaTime

尽管如此,尽管它在工作,但我并不是 100% 高兴,因为上面发布的代码的输出是“3y 6m 11h”,我不明白那 11 个小时的原因:S 无论如何,我只需要精度年和月所以我相信不是一个大问题。如果有人知道原因和/或在某些情况下是否会出现问题,请通过评论告诉我。

关于java - 格式持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com