计算两个日期之间的差异后得出错误的时间

时间:2013-09-04 21:13:02

标签: java calendar

我想计算某个日期和当前时间之间的差异。

 int month = 9;
 int day = 17;
 int year = 2013;

 Calendar date = new GregorianCalendar(year, month, day);

 int miliseconds= (int) (System.currentTimeMillis() - calendar.getTimeInMillis());

 System.out.println(msToString(second));

 String msToString(int ms) {
    return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date(ms));
 }

输出

13091-13091 /? D / GTA:1970-01-08 15:00:20.287

我希望得到剩余的天数,小时数,分钟数和秒数。

我错了什么?

4 个答案:

答案 0 :(得分:3)

你可以试试类似下面的方法

import java.util.Calendar;
import java.util.GregorianCalendar;


public class TimeToGoCalculator {

    /**
     * @param args
     */
    public static void main(String[] args) {

         int month = 8;
         int day = 19;
         int year = 2013;

         Calendar calendar = new GregorianCalendar(year, month, day);

         int timeToGo = (int) (calendar.getTimeInMillis() - System.currentTimeMillis())/1000;

         System.out.println(secondsToString(timeToGo));      
    }

    private static String secondsToString(int seconds) {

        int days = seconds / 24 / 3600;
        int hours = (seconds - (days * 24 * 3600 )) / 3600;
        int minutes = (seconds - (days * 24 * 3600 + hours * 3600)) / 60;
        seconds = (seconds - (days * 24 * 3600 + hours * 3600 + minutes * 60));

        return "The remaining time is "+days+" days, "+hours+" hours, "+minutes+
                " minutes, and "+seconds+" seconds.";
     }

}

这应该可以为您提供所需的输出。 请注意,在创建GregorianCalendar对象时,月份为0索引,因此9月将为= 8。

答案 1 :(得分:1)

您是否可以使用外部库?然后Joda Time可以帮助您,尤其是Period class

它有两个时间瞬间的构造函数,并为您提供以年/月/日/小时/秒/毫秒为单位的时间差异。

答案 2 :(得分:1)

使用Joda Time library
Period课可以提供帮助。

    int month = 9;
    int day = 17;
    int year = 2013;
    int hour= 0;
    int minute =0;
    int second =0;
    int millisecond = 0;

    DateTime dt1 = new DateTime(); //now
    DateTime dt2 = new DateTime(year, month, day, hour, minute, second, millisecond);

    //assuming dt1 is before dt2:
    Period period = new Period(dt1, dt2, PeriodType.dayTime());

   /*
    periodType.dayTime()):
    Gets a type that defines all standard fields from days downwards.

       days
       hours
       minutes
       seconds
       milliseconds 
   */

    PeriodFormatter periodFormatter = new PeriodFormatterBuilder()
            .printZeroAlways()
            .minimumPrintedDigits(2)
            .appendDays().appendSuffix("days ")
            .appendHours().appendSuffix("hours ")
            .appendMinutes().appendSuffix("minutes ")
            .appendSeconds().appendSuffix("seconds ");
            .toFormatter(); 

    System.out.println(periodFormatter.print(period));

答案 3 :(得分:0)

您的second变量在两个日期之间保留了毫秒数,而不是新日期。例如,您需要使用这些毫秒进行一些计算以获得一定的天数。

你可以这样做:

int minutes = second/1000/60; // millis to seconds, seconds to minutes

获得分钟数,然后转换为小时数,依此类推。