我想计算某个日期和当前时间之间的差异。
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
我希望得到剩余的天数,小时数,分钟数和秒数。
我错了什么?
答案 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
获得分钟数,然后转换为小时数,依此类推。