- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 Joda Time 的 PeriodFormatter 时遇到问题。我想要报告天数、小时数、分钟数和秒数,但我的尝试似乎需要数周时间。我应该采取哪些不同的做法?
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
public class Problems {
public static void main(String[] args) {
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroNever()
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendHours()
.appendSuffix(" hour", " hours")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(", ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
DateTime now = new DateTime();
DateTime justUnderAWeekAgo = now.minusDays(7).plusMinutes(1);
DateTime justOverAWeekAgo = now.minusDays(7).minusMinutes(1);
System.out.println(now);
System.out.println(justUnderAWeekAgo);
System.out.println(justOverAWeekAgo);
// I am happy with the following:
System.out.println(
formatter.print(new Period(justUnderAWeekAgo, now)));
// But not with this (outputs "1 minute" but I want "7 days, 1 minute"):
System.out.println(
formatter.print(new Period(justOverAWeekAgo, now)));
}
}
编辑: 我想我能明白为什么这不起作用 - 即格式化程序只打印 Period 的各种值,并且由于 Periods 存储数周的值,我的数天的值问题周期确实是 0。但我仍然需要一个好的方法来做到这一点......
最佳答案
你的问题是你没有要求你的 PeriodFormatter
显示周数。
两种可能性:
解决方案 1:显示星期:
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroNever()
.appendWeeks()
.appendSuffix(" week", " weeks")
.appendSeparator(", ")
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(", ")
.appendHours()
.appendSuffix(" hour", " hours")
.appendSeparator(", ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(", ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
您示例中的第二个输出将是:
1 week, 1 minute
解决方案 2:仅显示日期,因此您必须使用 PeriodType.yearMonthDayTime()
:
new Period(justUndeAWeekAgo, now, PeriodType.yearMonthDayTime());
使用第二种解决方案,您可以将 PeriodFormatter
保持原样。您示例中的第二个输出将是:
7 days, 1 minute
关于java - 我的 PeriodFormatter 没有按预期运行 - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2236213/
我正在使用 PeriodFormatter 返回一个字符串,显示事件发生前的时间。下面的代码不断创建像 1146 小时 39 分钟这样的字符串,而不是 x 天 y 小时 z 分钟。有什么想法吗? 谢谢
我有这个PeriodFormatter: PeriodFormatterBuilder() .appendDays() .appendSuffix(
我正在使用 JodaTime 为 Android 应用程序实现倒数计时器。输出因设备而异。 DateTime openingDateTime = new DateTime(2018, D
我有一个格式化程序如下: private static PeriodFormatter formatter = new PeriodFormatterBuilder() .p
我不明白我做错了什么,我一定错过了一些东西。 private PeriodFormatter fmt = new PeriodFormatterBuilder() .print
我在使用 Joda Time 的 PeriodFormatter 时遇到问题。我想要报告天数、小时数、分钟数和秒数,但我的尝试似乎需要数周时间。我应该采取哪些不同的做法? import org.jod
我以为我明白了,但显然我不明白。你能帮我通过这些单元测试吗? @Test public void second() { assertEquals("00:00:01", OurDateTime
当我如下使用 PeriodFormatter 时 PeriodFormatter formatter = new PeriodFormatterBuilder().appendHours()
我只需要显示天/天的后缀,我该如何实现?它不起作用: java.lang.IllegalStateException: No field to apply suffix to.. privat
我在一个项目上使用 joda-time (1.6.2),我正在做的其中一件事就是计算预测时间和实际时间之间的差异。这种差异有时是积极的,有时是消极的。虽然适当的方法可能是使用 Duration 而不是
我是一名优秀的程序员,十分优秀!