2016-09-14 111 views
0

我试图找到两个日期/时间之间的天数,小时数,分钟数和秒数。我以为我可以使用期限,我尝试了下面的代码,但我得到了一个不合情理的答案。Joda时间计算两个日期时间对象之间的天数,小时数,分钟数和秒数

DateTime dt1 = new DateTime("2004-12-13T21:39:45.618-06:00"); 
    DateTime dt2 = new DateTime("2004-12-13T21:39:45.618-08:00"); 
    Period p = new Period(dt1, dt2); 

    System.out.println("Test: " + p); 

由此我得到的输出:

I/System.out: Test: PT2H 

不知道这是什么意思意思。

感谢您的帮助

+0

你能解释为什么它是荒谬的,什么输出将是有意义的,你特殊的静态方法? –

+0

因为对我来说没有意义。我认为这是有道理的haha –

+1

请指出_does_对你有意义。 'PT2H'完美描述了2个小时的时间。 –

回答

4

toString()方法让你的价值ISO8601持续时间格式。

从API:

获取的值作为ISO8601期间 格式风格的字符串。从技术上讲,输出可能违反ISO规范,因为可能包含 周。例如,“PT6H3M5S”代表6小时,3分钟,5秒。

至于你问到单独获得小时分钟您可以使用来自API的便捷get方法:

import org.joda.time.DateTime; 
import org.joda.time.Period; 

... 
DateTime dt1 = new DateTime("2004-12-13T21:39:45.618-06:00"); 
DateTime dt2 = new DateTime("2004-12-13T21:39:45.618-08:00"); 
Period p = new Period(dt1, dt2); 

System.out.println("DAYS: " + p.getDays()) 
System.out.println("HOURS: " + p.getHours()); 
System.out.println("MINUTES: " + p.getMinutes()); 
System.out.println("SECONDS: " + p.getSeconds()); 

或者称为其他答案建议使用PeriodFormatter

+0

感谢您的解释,真的很感激。字符串方法刚刚给出了相同的答案。但它给了我一个我给出的输出的清晰解释。再次感谢。 –

+0

@NicholasMuir因为'System.out.println'隐式调用对象的'toString()'方法。很高兴帮助你。 – albciff

1

您需要格式化您的Period。一个简单的方法是使用默认的一个是这样的:

PeriodFormat.getDefault().print(period) 

您还可以PeriodFormatter创建自己的格式。

2

期间被印刷在ISO格式

标准ISO格式 - P yYmMwWd dŤHH MMSS。

如果您需要查找两天之间的天数,小时数,分钟数和秒数,则应该将句点转换为特定类型。例如。:

Period p = new Period(dt1, dt2); 
    System.out.println("Days: " + p.toStandardDays().getDays()); 
    System.out.println("Hours: " + p.toStandardHours().getHours()); 
    System.out.println("Minutes: " + p.toStandardMinutes().getMinutes()); 
    System.out.println("Seconds: " + p.toStandardSeconds().getSeconds()); 

或使用类DaysHoursMinutesSeconds

System.out.println("Days: " + Days.daysBetween(dt1, dt2)); 
    System.out.println("Hours: " + Hours.hoursBetween(dt1, dt2)); 
    System.out.println("Minutes: " + Minutes.minutesBetween(dt1, dt2)); 
    System.out.println("Seconds: " + Seconds.secondsBetween(dt1, dt2)); 
相关问题