(Java/Android)计算两个日期之间的天数,并以特定格式显示结果
我尝试按如下方式计算两个日期之间的天数:(Java/Android)计算两个日期之间的天数,并以特定格式显示结果,java,android,android-widget,Java,Android,Android Widget,我尝试按如下方式计算两个日期之间的天数: 获取当前日期 获取过去或将来的日期 计算1号和2号之间的差值 按以下格式显示日期 如果结果是过去(2天前)或未来(2天内) 格式将:天、周、月、年 我尝试了不同的方法,但是没有得到我想要的结果。我发现Android DatePicker对话框将日期转换为整数。我还没有找到一种方法使DatePicket小部件返回日期变量而不是整数 private DatePickerDialog.OnDateSetListener mDateSetListener =
- 如果结果是过去(2天前)或未来(2天内)
- 格式将:天、周、月、年
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, **int** year,
**int** monthOfYear, **int** dayOfMonth) {
enteredYear = year;
enteredMonth = monthOfYear;
enteredDay = dayOfMonth;
}
};
基于上述内容,我尝试将系统日期转换为整数,但在尝试计算两个日期之间的天数时,这实际上不起作用
private void getSystemDate(){
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
systemYear = mYear;
mMonth = c.get(Calendar.MONTH);
systemMonth = mMonth + 1;
mDay = c.get(Calendar.DAY_OF_MONTH);
systemDay = mDay;
}
从这里,您只需选择您的格式。也许使用日期格式化程序?至于决定未来的事情等等,你可以看看三角洲是正的还是负的。负增量表示过去的事件
/**
* Returns a string that describes the number of days
* between dateOne and dateTwo.
*
*/
public String getDateDiffString(Date dateOne, Date dateTwo)
{
long timeOne = dateOne.getTime();
long timeTwo = dateTwo.getTime();
long oneDay = 1000 * 60 * 60 * 24;
long delta = (timeTwo - timeOne) / oneDay;
if (delta > 0) {
return "dateTwo is " + delta + " days after dateOne";
}
else {
delta *= -1;
return "dateTwo is " + delta + " days before dateOne";
}
}
编辑:刚刚在另一个线程中看到相同的问题:
编辑2:要获取年/月/周,请执行以下操作:
int year = delta / 365;
int rest = delta % 365;
int month = rest / 30;
rest = rest % 30;
int weeks = rest / 7;
int days = rest % 7;
java/android API为您提供了所有答案:
Calendar myBirthday=Calendar.getInstance();
myBirthday.set(1980, Calendar.MARCH, 22);
Calendar now = Calendar.getInstance();
long diffMillis= Math.abs(now.getTimeInMillis()-myBirthday.getTimeInMillis());
long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS);
整数不能用来计算两天之间的差值。你需要使用long(就像Adeonetlira说的那样)。这就是我面临的问题——默认情况下,Android中的日期选择器会将日期转换为整数,正如上面的代码片段所示。如何使用int来表示日期,对我来说一点意义都没有。除非Android java不同,否则不能将时间戳表示为int,因为max int值不够大。时间戳非常大。。。就像数万亿和数万亿一样。@jahroy-这是Android的默认设置。从上面的第1段代码中可以看到,当用户通过日期对话框选择器设置日期时,DatePickerDialog.OnDateSetListener返回整数值。在代码中,整数用于表示年份、月份和月份的日期。在这方面使用ints是非常有意义的。。。事实上,使用long来实现这一点是没有意义的。我的评论(以及下面的所有答案)建议您通过减去代表这些日期的时间戳来确定两个日期之间的差异。这应该用长时间来完成。正如这些答案所示,您需要确定带有时间戳的日期之间的差异,然后将差异转换为天、周、月等。我认为新日期(delta)不起作用,因为delta不是1970年1月1日00:00:00 GMT以来的毫秒。感谢您提供的信息!这将以天为单位显示差异。在几天、几周和几年内,有什么合适的方法来表示这一点?你需要做一些数学运算并使用模运算符。要将x秒显示为分和秒,可以这样做:int minutes=x/60;整数秒=x%60;字符串timeText=minutes+“min”+seconds+“sec”;百分号称为模运算符。@striders更新了我的答案。。。如果您认为答案正确,请接受。感谢您在几周/几天/几个月内修改了答案。我将把它插入我的Android代码中,并尝试一下@漫游者-只有当你的约会时间间隔小于25天时,使用上面的int才有效。编辑答案以使用long代替。
Calendar myBirthday=Calendar.getInstance();
myBirthday.set(1980, Calendar.MARCH, 22);
Calendar now = Calendar.getInstance();
long diffMillis= Math.abs(now.getTimeInMillis()-myBirthday.getTimeInMillis());
long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS);