Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java/Android)计算两个日期之间的天数,并以特定格式显示结果_Java_Android_Android Widget - Fatal编程技术网

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

(Java/Android)计算两个日期之间的天数,并以特定格式显示结果,java,android,android-widget,Java,Android,Android Widget,我尝试按如下方式计算两个日期之间的天数: 获取当前日期 获取过去或将来的日期 计算1号和2号之间的差值 按以下格式显示日期 如果结果是过去(2天前)或未来(2天内) 格式将:天、周、月、年 我尝试了不同的方法,但是没有得到我想要的结果。我发现Android DatePicker对话框将日期转换为整数。我还没有找到一种方法使DatePicket小部件返回日期变量而不是整数 private DatePickerDialog.OnDateSetListener mDateSetListener =

我尝试按如下方式计算两个日期之间的天数:

  • 获取当前日期
  • 获取过去或将来的日期
  • 计算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;
    
    }
    
    从这里,您只需选择您的格式。也许使用日期格式化程序?至于决定未来的事情等等,你可以看看三角洲是正的还是负的。负增量表示过去的事件

    /** 
      *  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);