java-两天内两个不同时间之间的差异

java-两天内两个不同时间之间的差异,java,jodatime,Java,Jodatime,我想写一个程序,显示从现在到将来某个日期的某个特定时间的剩余时间。由于我想使用Joda Time我搜索了很多,找到了一些代码(例如),但我不知道如何在两天内的两个不同时间使用这些代码。有什么想法吗 package com.test; import java.util.Calendar; import org.joda.time.Duration; public class Main { public Main() { } public static void main(String[]

我想写一个程序,显示从现在到将来某个日期的某个特定时间的剩余时间。由于我想使用
Joda Time
我搜索了很多,找到了一些代码(例如),但我不知道如何在两天内的两个不同时间使用这些代码。有什么想法吗

package com.test;

import java.util.Calendar;

import org.joda.time.Duration;

public class Main {

public Main() {
}

public static void main(String[] args) {
    Calendar calendar1 = Calendar.getInstance();
    Calendar calendar2 = Calendar.getInstance();

    calendar1.add(Calendar.DAY_OF_YEAR, 1);
    calendar1.add(Calendar.HOUR_OF_DAY, 2);
    calendar1.add(Calendar.MINUTE, 10);

    Duration duration = new Duration(calendar2.getTimeInMillis(), calendar1.getTimeInMillis());
    System.out.println(duration.getMillis());
    System.out.println(duration.getStandardDays());
    System.out.println(duration.getStandardMinutes());
    System.out.println(duration.getStandardHours());
    System.out.println(duration.getStandardSeconds());
}

}
我想这可能对你有帮助

此代码将给出完全相同的持续时间。您需要将calendar2设置为将来的固定日期,以获得所需的结果

更新1

你可以像这样在将来的固定日期。还有其他更好的方法可以达到同样的效果

package com.test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.joda.time.Duration;

public class Main {

public Main() {
}

public static void main(String[] args) throws ParseException {
    Calendar calendar1 = Calendar.getInstance();

    DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

    Date date1 = calendar1.getTime();
    Date date2 = df.parse("2015/03/20 10:30:00");


    Duration duration = new Duration(date1.getTime(), date2.getTime());
    long millis = duration.getMillis();
    long days = duration.getStandardDays();
    long mins = duration.getStandardMinutes();
    long hrs = duration.getStandardHours();
    long secs = duration.getStandardSeconds();

    System.out.println(days + ":" + (hrs % 24) + ":" + (mins%60) + ":" + (secs%(mins)) + " remaining");
}

}

你是说像

DateTime from = new DateTime(2014, DateTimeConstants.FEBRUARY, 15, 8, 51, 30, 100);
DateTime to = new DateTime(2016, DateTimeConstants.DECEMBER, 25, 17, 01, 51, 50);

Interval i = new Interval(from, to);
Period p = i.toPeriod(PeriodType.yearMonthDayTime());

System.out.println(p.getYears() + " years");
System.out.println(p.getMonths() + " months");
System.out.println(p.getDays() + " days");
System.out.println(p.getHours() + " hours");
System.out.println(p.getSeconds() + " seconds");
System.out.println(p.getMillis() + " millis");
哪个输出

2 years
10 months
10 days
8 hours
20 seconds
950 millis
现在使用

DateTime from = new DateTime();
DateTime to = new DateTime(2015, 3, 21, 2, 15, 10);
相反,打印

0 years
0 months
7 days
15 hours
26 seconds
755 millis

您提到要使用Joda time,因此其他解决方案之一可能更适合您

但是,现在使用Java 8的本机时间库也可以很容易地完成相同的过程,如下所示:

public class Main {

    public static void main() {
        Instant then = Instant.EPOCH;  //1970-01-01T00:00:00Z
        Instant now = Instant.now(); //The current "instant" in time

        Duration duration = Duration.between(then, now);

        //Outputs the days, hours, minutes, and seconds between the epoch start and now.
        System.out.println(duration.getDays());
        System.out.println(duration.getHours());
        System.out.println(duration.getMinutes());
        System.out.println(duration.getSeconds());

        //If you want to account for having already displayed days 
        //when showing your hours, and so on down the units, do this:
        System.out.println(duration.getDays());
        duration = duration.minusDays(duration.getDays());

        System.out.println(duration.getHours());
        duration = duration.minusHours(duration.getHours());

        System.out.println(duration.getMinutes());
        duration = duration.minusMinutes(duration.getMinutes());

        System.out.println(duration.getSeconds());
    }

}

请在此处查看完整的软件包文档:

对于您需要的内容有些困惑。你只是想在“现在”和未来的某个特定日期之间有所区别吗?如果是这样的话,这很容易做到。被“两天两次不同的时间”弄糊涂了,你能发布到目前为止的代码吗?这可能有助于我们了解您正在尝试做什么。您的输入和预期输出是什么?@MadProgrammer我想给出两个日期(年、月、日、小时、分钟、秒),并给出它们之间的持续时间(天、小时、分钟、秒),这是一种使用
持续时间的有趣方式。你为什么不直接使用
LocalDateTime
呢?我不知道LocalDateTime:)我认为它是特定于jodatime的。没有使用过JodaTime lot。我很乐意向您学习。您的意思是:@muasif80工作不正常:(@Soheil它怎么工作不正常?您的输入和预期输出是什么?是的。这是正确的方法,我很乐意学习。谢谢。@madthanx但我得到了奇怪的结果!
LocalDateTime from=new LocalDateTime();LocalDateTime to=新的LocalDateTime(2015,3,21,2,15,10);
给我0天时间。为什么???!是的,我在运行此程序后也注意到了这一点。即使是您的输入,我相信也不会给我3天时间@MadProgrammer@muasif80请参阅更新-显示我实际执行此操作的频率:P:)那么更新是什么?现在获取period对象的方式是更新或更改DateTime。不过我现在也要运行这个。太棒了,但问题确实说明了他们想要/需要使用Joda时间,并且考虑到他们想要两个日期之间的天、小时、分钟和秒,这表明
Period
会更好choice@MadProgrammer在这件事上我同意你。事实上,考虑到Joda的时间要求,我一直在争论是否应该回答,最终我认为这不会有什么坏处,也可能对讨论有用。根据您的评论,我已经更新了代码,以天、小时、分钟和秒为单位显示输出。