在Java中打印时间段的库,只提供最重要的字段
我想将时间段格式化为英语和其他语言 然而,我想要一种简单的方法,只列出最重要的一两个字段,例如“2年零3个月”或“5天”,而不必编写代码来处理这个问题。Joda Time的问题是,除非您编写代码,否则它会给您类似“2年3个月零5天”的输出 有些图书馆做的正是我想要的,但只是为了和现在比较,比如“3个月前”。我只想要“3个月” 当然,一定有一个库的行为像美丽的时间,但为通用的持续时间在Java中打印时间段的库,只提供最重要的字段,java,date,grails,groovy,Java,Date,Grails,Groovy,我想将时间段格式化为英语和其他语言 然而,我想要一种简单的方法,只列出最重要的一两个字段,例如“2年零3个月”或“5天”,而不必编写代码来处理这个问题。Joda Time的问题是,除非您编写代码,否则它会给您类似“2年3个月零5天”的输出 有些图书馆做的正是我想要的,但只是为了和现在比较,比如“3个月前”。我只想要“3个月” 当然,一定有一个库的行为像美丽的时间,但为通用的持续时间 我专门使用Grails/Groovy,但普通Java解决方案同样可以接受。为什么不能使用Joda Time编写一点
我专门使用Grails/Groovy,但普通Java解决方案同样可以接受。为什么不能使用Joda Time编写一点代码?我遇到了一个与您类似的问题,我用如下实用方法解决了它: 也许这不是你想要的,但我希望它能帮助你
问候。为什么不能使用Joda Time编写一点代码?我遇到了一个与您类似的问题,我用如下实用方法解决了它: 也许这不是你想要的,但我希望它能帮助你
注意。有时当您有特定需求时,您必须编写一些代码。你应该能够复制一些几乎是你想要的东西并加以扩展。您甚至可以将更改作为补丁提供,以便其他人可以利用您的改进。@PeterLawrey您所说的“特定”是什么意思?你是说对我来说是独一无二的?那么你是完全正确的;然而,我就是不相信这种必要性是我特有的??!!在这种情况下,提供您对开源项目所做的任何改进将非常有用,以便其他人可以利用它们。我没有使用PrettyTime(尽管我真的很想),但在它的功能下,它表示生成人类可读的时间戳,如“现在”、“2天前”或“3个月后”wvh回避了这样一个事实,即它也可以执行“日期”操作。有时,当您有特定的需求时,您必须编写一些代码。你应该能够复制一些几乎是你想要的东西并加以扩展。您甚至可以将更改作为补丁提供,以便其他人可以利用您的改进。@PeterLawrey您所说的“特定”是什么意思?你是说对我来说是独一无二的?那么你是完全正确的;然而,我就是不相信这种必要性是我特有的??!!在这种情况下,提供您对开源项目所做的任何改进将非常有用,以便其他人可以利用它们。我没有使用PrettyTime(尽管我真的很想),但在它的功能下,它表示生成人类可读的时间戳,如“现在”、“2天前”或“3个月后”wvh回避了这样一个事实,即它也可以执行“日期”操作—您没有编写上面的任何代码。看来您也不想添加任何代码?@PeterLawrey理想情况下不想:-)。在任何情况下,上面的代码实际上都不能满足要求,因此我不得不编写它。例如,只有在没有月/年的情况下才应添加天。@Fletch因此,如果您有50天,它将显示为
1 m,480 h
?@PeterLawrey它将显示为您在StackOverflow上提问的日期,但没有“ago”。因此,在您的示例中,它将显示为“2个月”(由于四舍五入)。我理解您希望避免编写代码,如果可能的话,我也尝试避免编写代码,因为我认为最可维护的代码是您不编写的代码,所以我尝试尽可能利用现有库。然而,根据我的经验,我的建议是,有时候你所寻找的东西并不存在,不值得花更多的时间去寻找那些不存在的东西。这取决于你是否一直试图找到一个现成的解决方案或写一点:)你没有写上面的任何代码。看来您也不想添加任何代码?@PeterLawrey理想情况下不想:-)。在任何情况下,上面的代码实际上都不能满足要求,因此我不得不编写它。例如,只有在没有月/年的情况下才应添加天。@Fletch因此,如果您有50天,它将显示为1 m,480 h
?@PeterLawrey它将显示为您在StackOverflow上提问的日期,但没有“ago”。因此,在您的示例中,它将显示为“2个月”(由于四舍五入)。我理解您希望避免编写代码,如果可能的话,我也尝试避免编写代码,因为我认为最可维护的代码是您不编写的代码,所以我尝试尽可能利用现有库。然而,根据我的经验,我的建议是,有时候你所寻找的东西并不存在,不值得花更多的时间去寻找那些不存在的东西。这取决于你是否一直在寻找现成的解决方案,或者写一点:)
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());