问题描述
|
请帮助我编写一个方法,该方法返回从提供的日期到今天的日期的天数(int)。
假设我们要向方法中提供int
110515
(适用于2011年5月15日)。它应返回9
(包含或排除对我而言并不重要)。
解决方法
将来的日期应该包括当天吗?意味着如果今天是2011年5月24日,那么110529应该是4还是5?
public static long numberOfDays(final long date) throws ParseException {
final Calendar compare = Calendar.getInstance();
compare.setTime(new SimpleDateFormat(\"yyMMdd\").parse(String.valueOf(date)));
final int dstOffset = compare.get(Calendar.DST_OFFSET);
final long currentTimeMillis = System.currentTimeMillis();
final long compareTimeInMillis = compare.getTimeInMillis();
long difference = 0;
if (currentTimeMillis >= compareTimeInMillis) {
difference = currentTimeMillis - compareTimeInMillis - dstOffset;
} else {
difference = compareTimeInMillis - currentTimeMillis + dstOffset;
}
return difference / (24 * 60 * 60 * 1000);
}
,如果可以使用Joda,这将非常简单:
Days d = Days.daysBetween(startDate,endDate);
int days = d.getDays();
当然可以将它们结合起来。
int days = Days.daysBetween(startDate,endDate).getDays();
Joda对象可以轻松地在JDK的日期类之间来回移动。
对于第一部分,创建一个DateFormatter,然后基于它解析字符串,如下所示:
DateTimeFormatter fmt = DateTimeFormat.forPattern(\"yyyyMMdd\");
DateTime dt = fmt.parseDateTime(strInputDateTime);
(将int转换为字符串之后。)
,由于这似乎是一个作业问题,所以我会帮助您。您将要使用Calendar.getTimeInMillis
。然后,您将需要创建一个常量NUMBER_OF_MILLIS_IN_DAY
。从那里,您从currentDate
中减去initialDate
(均为毫秒),然后除以常数。