我想比较我的Android应用程序的两个日期,但我遇到了一个非常奇怪的问题。
例如:
如果我将过去的日期设置为127天前:
this.dateEvent = System.currentTimeMillis() - (127 * 24 * 3600 * 1000)
然后将其与当前日期(两天之间)进行比较
Calendar sDate = getDatePart(new Date(this.dateEvent));
Calendar eDate = getDatePart(new Date(System.currentTimeMillis()));
int daysBetween = 0;
while (sDate.before(eDate))
{
sDate.add(Calendar.DAY_OF_MONTH, 1);
daysBetween ++;
}
while (sDate.after(eDate))
{
eDate.add(Calendar.DAY_OF_MONTH, 1);
daysBetween ++;
}
return daysBetween;
它将返回22个,这完全不是预期的结果。
我做错了什么吗?还是日历类有问题?
我终于找到了最简单的方法来处理这个问题。这是我的代码:
public int getTimeRemaining()
{
Calendar sDate = toCalendar(this.dateEvent);
Calendar eDate = toCalendar(System.currentTimeMillis());
// Get the represented date in milliseconds
long milis1 = sDate.getTimeInMillis();
long milis2 = eDate.getTimeInMillis();
// Calculate difference in milliseconds
long diff = Math.abs(milis2 - milis1);
return (int)(diff / (24 * 60 * 60 * 1000));
}
private Calendar toCalendar(long timestamp)
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
希望能有帮助。
请参考此代码,这可能会对您有所帮助。
public String getCountOfDays(String createdDateString, String expireDateString) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
Date createdConvertedDate = null, expireCovertedDate = null, todayWithZeroTime = null;
try {
createdConvertedDate = dateFormat.parse(createdDateString);
expireCovertedDate = dateFormat.parse(expireDateString);
Date today = new Date();
todayWithZeroTime = dateFormat.parse(dateFormat.format(today));
} catch (ParseException e) {
e.printStackTrace();
}
int cYear = 0, cMonth = 0, cDay = 0;
if (createdConvertedDate.after(todayWithZeroTime)) {
Calendar cCal = Calendar.getInstance();
cCal.setTime(createdConvertedDate);
cYear = cCal.get(Calendar.YEAR);
cMonth = cCal.get(Calendar.MONTH);
cDay = cCal.get(Calendar.DAY_OF_MONTH);
} else {
Calendar cCal = Calendar.getInstance();
cCal.setTime(todayWithZeroTime);
cYear = cCal.get(Calendar.YEAR);
cMonth = cCal.get(Calendar.MONTH);
cDay = cCal.get(Calendar.DAY_OF_MONTH);
}
/*Calendar todayCal = Calendar.getInstance();
int todayYear = todayCal.get(Calendar.YEAR);
int today = todayCal.get(Calendar.MONTH);
int todayDay = todayCal.get(Calendar.DAY_OF_MONTH);
*/
Calendar eCal = Calendar.getInstance();
eCal.setTime(expireCovertedDate);
int eYear = eCal.get(Calendar.YEAR);
int eMonth = eCal.get(Calendar.MONTH);
int eDay = eCal.get(Calendar.DAY_OF_MONTH);
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.clear();
date1.set(cYear, cMonth, cDay);
date2.clear();
date2.set(eYear, eMonth, eDay);
long diff = date2.getTimeInMillis() - date1.getTimeInMillis();
float dayCount = (float) diff / (24 * 60 * 60 * 1000);
return ("" + (int) dayCount + " Days");
}
这里有一个两行解决方案:
long msDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff);
在本例中,它获取日期“testCalendar”和当前日期之间的天数。
我使用获取给定时间段s的天数。 它似乎对大多数情况都有效,但是整整一个月,我有一段时间是零天。 以下测试用例失败(
问题内容: 我一直在寻找Android API,并且一直在寻找一种方法来计算当前日期和未来日期之间的天数。我对android很陌生,几年来我还没有做过Java。什么是最简单的计算方法? 谢谢 问题答案: 最简单的方法是为此使用Joda Time Days类:
问题内容: 查看两个日期之间有多少整天的最短方法是什么?这就是我现在正在做的。 问题答案: 假设您确实有两个日期对象,则可以从另一个对象中减去一个,然后查询结果对象的天数: 它也适用于日期时间-我认为它会四舍五入到最近的日期:
问题内容: 我有一个航班行程计划,需要获取出发时间和到达时间之间的差额。我从数据中获得这些指定的时间作为字符串。这是我的问题: 输出: 第一次返回11:39和14:35之间的差异就好了。但是第二个区别只是5小时,而应该是19小时。我该怎么解决,我在做什么错呢? 任何帮助将不胜感激。 编辑:我正在使用图形来存储我的数据。两个机场之间的最短路线的示例是这样的: 这些是使我们从EDI飞往SYD的3航班。
我有项目租赁应用程序。我需要决定在date_finish和date_start(包括这些日期)之间的日期中是否有car可用。我有模型车和订单。订单有很少的字段:和、如何只取这些在start_date和stop_date之间可用的CARID(包括这两天)。 汽车: 订单: 状态:1为新订单,2为当前持续的订单,3为存档/已完成的订单 mongoose查询: 那个查询不起作用。谁能帮我? 编辑:我必须
问题内容: 在我的应用中,我创建了一个代表高中班级的对象。该对象包含2个Calendar对象,分别代表班级每天的开始和结束时间。当用户创建作业时,我要检查当前时间是否在任何课程的两次之间。如果是的话,我知道作业是在该课程中创建的。这是我当前无法使用的代码,因为.getTime()返回一个包含月和日的日期,而我只想比较小时和分钟。因此,如何修剪返回的日期,使其仅包含一天中的时间?使用joda- ti