Joda时间计算两个日期时间对象之间的天,小时,分钟和秒

时间:2016-09-14 12:26:29

标签: java jodatime

我想找到两个日期/时间之间的日,小时,分钟和秒。我以为我可以使用句号,我尝试了下面的代码,但我得到了一个非荒谬的答案。

    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

不确定这是什么意思。

感谢您的帮助

4 个答案:

答案 0 :(得分:5)

toString()中的

Period方法为您提供ISO8601持续时间格式的值。

来自API:

  

以ISO8601持续时间的样式获取值作为String   格式。从技术上讲,输出可能违反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

答案 1 :(得分:2)

期间以ISO格式打印

  

标准ISO格式 - P yYmMwWd D T hH mMsS。

如果您需要在两天之间找到天,小时,分钟和秒,则应将期间转换为特定类型。 E.g:

 self.addEventListener('push', function(event) {
 console.log('Push message received', event);
 var title = 'Push message';
 event.waitUntil(
 self.registration.showNotification(title, {
 body: 'Please choose to like or reply      
  icon: 'images/icon.png',
  tag: 'my-tag',
  actions:[
     {action:"like", title: "Like"},
     {action:"reply", title: "⤻ Reply"}]
}));
});

或在类i = imread('sq.jpg'); i_bw = im2bw(i)==0; % Modify the strel as required se = strel('square', 10); i_ed = imopen(i_bw, se); limits = sum(i_ed, 2); top_y = find(limits>0, 1); bottom_y = find(limits>0, 1, 'last'); top_x = round(mean(find(i_ed(top_y, :)>0))); bottom_x = round(mean(find(i_ed(bottom_y, :)>0))); slope = -1 * (top_y - bottom_y)/(top_x - bottom_x); rot_angle = 2 * pi * atan(slope); i2 = imrotate(i, -rot_angle); imshow(i2) 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()); DaysHours

中使用特殊的静态方法
Minutes

答案 2 :(得分:1)

我认为你必须格式化期间的对象。请参阅此链接 Period to string

答案 3 :(得分:1)

您需要格式化mod_muc: ## host: "conference.@HOST@" access: muc_access access_create: muc_admin default_room_options: public: true public_list: true allow_change_subj: true allow_query_users: true allow_private_messages: true allow_user_invites: true members_by_default: true title: "New chatroom" anonymous: false access_admin: muc_admin 。一种简单的方法是使用默认的方式:

Period

您还可以使用PeriodFormat.getDefault().print(period) 创建自己的格式。