在java中,我想获得两个日期之间的天数,不包括那两个日期.
例如:
如果第一个日期= 11 November 2011,第二个日期= 13 November 2011
那么它应该是1.
这是我正在使用但不起作用的代码(secondDate并且firstDate是Calendar对象):
long diff=secondDate.getTimeInMillis()-firstDate.getTimeInMillis();
float day_count=(float)diff / (24 * 60 * 60 * 1000);
daysCount.setText((int)day_count+"");
Run Code Online (Sandbox Code Playgroud)
我甚至试图将结果四舍五入,但这没有帮助.
如何获取java中日期之间的天数,不包括日期本身?
小智 10
我刚刚在SDK 8(Android 2.2)上测试了以下代码片段:
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.clear();
date1.set(
datePicker1.getYear(),
datePicker1.getMonth(),
datePicker1.getDayOfMonth());
date2.clear();
date2.set(
datePicker2.getYear(),
datePicker2.getMonth(),
datePicker2.getDayOfMonth());
long diff = date2.getTimeInMillis() - date1.getTimeInMillis();
float dayCount = (float) diff / (24 * 60 * 60 * 1000);
textView.setText(Long.toString(diff) + " " + (int) dayCount);
Run Code Online (Sandbox Code Playgroud)
它完美无缺,在两种情况下(2011年11月10日 - 2011年11月8日)和(2011年11月13日 - 2011年11月11日)给出dayCount = 2.0
快速而肮脏的黑客:
public int get_days_between_dates(Date date1, Date date2)
{
//if date2 is more in the future than date1 then the result will be negative
//if date1 is more in the future than date2 then the result will be positive.
return (int)((date2.getTime() - date1.getTime()) / (1000*60*60*24l));
}
Run Code Online (Sandbox Code Playgroud)
此功能将在99.99%的时间内工作,除非您在闰秒,夏令时,时区变化闰年等边缘情况下出现意外情况.如果你可以偶尔计算1(或2)小时的计算,这就足够了.
如果你问这个问题,你需要打自己.两个日期相隔至少1天是什么意思?这很令人困惑.如果一个日期在一个时区中是午夜,而另一个日期在另一个时区的上午1点怎么办?根据您的解释方式,答案是1和0.
您认为您可以将传递给上述函数的日期强制为通用时间格式,这将解决您的一些问题.但是,您只需将问题重新定位为如何将当地时间转换为通用时间.从您的时区到世界时的逻辑转换可能不是直观的.在某些情况下,当过去的日期明显相隔两天时,您将获得一天的差异.
你认为你可以解决这个问题吗?世界上有一些迟钝的日历系统根据收获季节不断变化并安装了政治统治者.如果你想将他们的时间转换为UTC,java.util.Date将在最糟糕的时刻失败.
如果你需要计算日期之间的日期并确保一切正常,那么你需要获得一个名为Joda Time的外部库:(他们已经为你处理了所有的细节,所以你可以保持幸福而不知道它们):http://joda-time.sourceforge.net/index.html