0

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

 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

4 回答 4

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,因此九月 = 8。

于 2013-09-04T21:53:24.493 回答
1

您可以使用外部库吗?那么 Joda Time 可以帮助你,尤其是Period 类

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

于 2013-09-04T22:26:30.707 回答
1

使用Joda 时间库
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));
于 2013-09-04T22:56:51.117 回答
0

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

你可以这样做:

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

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

于 2013-09-04T21:21:57.803 回答