(Java / Android) 计算两个日期之间的天数并以特定格式呈现结果

Posted

技术标签:

【中文标题】(Java / Android) 计算两个日期之间的天数并以特定格式呈现结果【英文标题】:(Java / Android) Calculate days between 2 dates and present the result in a specific format 【发布时间】:2012-05-06 16:41:45 【问题描述】:

我正在尝试计算两个日期之间的天数,如下所示:

    获取当前日期 获取过去或未来的日期 计算编号之间的差异。 1和没有。 2 按以下格式显示日期 如果结果是过去(2 天前)或将来(2 天) 格式将:天、周、月、年

我尝试了不同的方法,但无法获得上面想要的结果。我发现 android DatePicker 对话框将日期转换为整数。我还没有找到一种方法让 DatePicket 小部件返回日期变量而不是整数。

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;


【问题讨论】:

ints 不能用于计算天数之间的差异。您需要使用 long(如 AedonEtLIRA 所说)。 这就是我遇到的问题 - 默认情况下,Android 中的 DatePicker 会将日期转换为整数,如上面的代码 sn-p 所示。 对我来说如何使用 int 来表示日期并没有立即意义。除非 Android java 不同,否则不能将时间戳表示为 int,因为 max int 值不够大。时间戳非常大......像万亿和万亿。 @jahroy - 这是 Android 的默认设置。从上面的第一个代码中可以看出,当用户从日期对话框选择器中设置日期时,DatePickerDialog.OnDateSetListener 返回整数值。 在您的代码中,整数用于表示年份、年份中的月份和月份中的日期。为此使用 int 非常有意义……事实上,为此使用 long 是没有意义的。我的评论(以及下面的所有答案)建议您应该通过减去代表这些日期的时间戳来确定两个日期之间的差异。这应该用多头来完成。就像这些答案所展示的那样,您需要确定带有时间戳的日期之间的差异,然后将差异转换为天、周、月等...... 【参考方案1】:
/** 
  *  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";
    

编辑:刚刚在另一个帖子中看到了同样的问题: how to calculate difference between two dates using java

Edit2:要获取年/月/周,请执行以下操作:

int year = delta / 365;
int rest = delta % 365;
int month = rest / 30;
rest = rest % 30;
int weeks = rest / 7;
int days = rest % 7;

【讨论】:

感谢您的信息!这将以天为单位显示差异。以天、周和年显示这一点的适当方式是什么? 您需要做一些数学运算并使用模运算符。要将 x 秒显示为分钟和秒,您可以这样做: int minutes = x / 60; int 秒 = x % 60;字符串 timeText = 分钟 + “分钟” + 秒 + “秒”;百分号称为模运算符。 @striders 更新了我的答案...如果您认为正确,请接受答案 感谢您在几周/几天/几个月内修改后的答案。我将把它插入我的 Android 代码并试一试! @striders - 仅当您的日期相隔少于 25 天时,使用上面的 int 才有效。编辑答案改为使用 longs。【参考方案2】:
long delta = Date2.getTime() - Date1.getTime();

new Date(delta);

从这里,您只需选择您的格式。也许使用日期格式化程序?至于确定未来的东西等等,你可以看看增量是正的还是负的。负 delta 表示过去的事件。

【讨论】:

我认为 new Date(delta) 不会起作用,因为增量不是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。【参考方案3】:

好吧,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);

【讨论】:

以上是关于(Java / Android) 计算两个日期之间的天数并以特定格式呈现结果的主要内容,如果未能解决你的问题,请参考以下文章

java:通过Calendar类正确计算两日期之间的间隔

java中计算两个日期之间差的天数

java计算两个日期之间的天数

java中计算两个日期之间差的天数

用java怎么计算两个日期之间年数,季度数,月数

java中如何计算出两个日期之间相差多少天