GVKun编程网logo

Android计算两个日期之间的天数(android计算两个日期之间的天数怎么算)

16

在本文中,我们将为您详细介绍Android计算两个日期之间的天数的相关知识,并且为您解答关于android计算两个日期之间的天数怎么算的疑问,此外,我们还会提供一些关于(Java/Android)计算

在本文中,我们将为您详细介绍Android计算两个日期之间的天数的相关知识,并且为您解答关于android计算两个日期之间的天数怎么算的疑问,此外,我们还会提供一些关于(Java / Android)计算两个日期之间的日期,并以特定格式显示结果、Android编程实现计算两个日期之间天数并打印所有日期的方法、Android计算两个日期相差天数、flex计算两个日期之间相差的天数的有用信息。

本文目录一览:

Android计算两个日期之间的天数(android计算两个日期之间的天数怎么算)

Android计算两个日期之间的天数(android计算两个日期之间的天数怎么算)

我编写了以下代码来查找两个日期之间的日期

    startDateValue = new Date(startDate);    endDateValue = new Date(endDate);    long diff = endDateValue.getTime() - startDateValue.getTime();    long seconds = diff / 1000;    long minutes = seconds / 60;    long hours = minutes / 60;    long days = (hours / 24) + 1;    Log.d("days", "" + days);

当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。

我究竟做错了什么?感谢您的时间。

注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时间。不推荐使用日期构造函数。

答案1

小编典典

您用于生成日期对象的代码:

Date date = new Date("2/3/2017"); //deprecated

您得到28天作为答案,因为根据Date(String)构造函数,它认为天= 3,月= 2和年= 2017

您可以将String转换为Date,如下所示:

String dateStr = "2/3/2017";SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");Date date = sdf.parse(dateStr);

使用上面的模板制作Date对象。然后使用下面的代码计算两个日期之间的天数。希望这件事能解决。

它可以按如下方式完成:

long diff = endDateValue.getTime() - startDateValue.getTime();System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

请检查链接

如果您使用Joda Time,它将更加简单:

int days = Days.daysBetween(date1, date2).getDays();

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

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

我试图在2个日期之间计算日期如下:

>获取当前日期
>获取过去或未来的日期
>计算不同的差异. 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;
            }
        };

基于上述,我尝试将系统日期转换为Integer,但是当尝试计算2个日期之间的日期时,这并不真的有效.

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";
    }
}

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

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

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

Android编程实现计算两个日期之间天数并打印所有日期的方法

Android编程实现计算两个日期之间天数并打印所有日期的方法

本文实例讲述了Android编程实现计算两个日期之间天数并打印所有日期的方法。分享给大家供大家参考,具体如下:

以下代码是计算两个日期之间的天数,并打印所有日期

注:开始时,增加天数时,一天的毫秒数直接用24*60*60*1000来逐步增加天数,再测试时发现,当两个日期之间的天数超过24天时,打印的日期反而在开始日期之前了,(如打印2016/12/18-2017/1/23,打印的日期反而有2016/12/1),后来发现原因在于24*60*60*1000是一个int值,int值的取值范围在2的31次方:+/- 2147483648,当超过最大数时,就会变成最小数,这样反而导致日期变小,将24*60*60*1000变为long类型的值即可:private long static final long ONE_DAY_MS=24*60*60*1000

/**
* 计算两个日期之间的日期
* @param startTime
* @param endTime
*/
private void betweenDays(long startTime,long endTime,long mills_select,int code){
   Date date_start=new Date(startTime);
   Date date_end=new Date(endTime);
   //计算日期从开始时间于结束时间的0时计算
   Calendar fromCalendar = Calendar.getInstance();
   fromCalendar.setTime(date_start);
   fromCalendar.set(Calendar.HOUR_OF_DAY,0);
   fromCalendar.set(Calendar.MINUTE,0);
   fromCalendar.set(Calendar.SECOND,0);
   fromCalendar.set(Calendar.MILLISECOND,0);
   Calendar toCalendar = Calendar.getInstance();
   toCalendar.setTime(date_end);
   toCalendar.set(Calendar.HOUR_OF_DAY,0);
   toCalendar.set(Calendar.MINUTE,0);
   toCalendar.set(Calendar.SECOND,0);
   toCalendar.set(Calendar.MILLISECOND,0);
   int s = (int) ((toCalendar.getTimeInMillis() - fromCalendar.getTimeInMillis())/ (ONE_DAY_MS));
   if(s>0){
     for(int i = 0;i<=s;i++){
       long todayDate = fromCalendar.getTimeInMillis() + i * ONE_DAY_MS;
       /**
        * yyyy-MM-dd E :2012-09-01
        */
       Log.i("打印日期",Utils.getCustonFormatTime(todayDate,"yyyy-MM-dd"));
     }
   }else {//此时在同一天之内
       Log.i("打印日期",Utils.getCustonFormatTime(startTime,"yyyy-MM-dd"));
   }
}

Utils.getCustonFormatTime()方法代码如下:

/**
* 格式化传入的时间
*
* @param time   需要格式化的时间
* @param formatStr 格式化的格式
* @return
*/
public static String getCustonFormatTime(long time,String formatStr) {
    SimpleDateFormat format = new SimpleDateFormat(formatStr);
    Date d1 = new Date(time);
    return format.format(d1);
}

PS:这里再为大家推荐几款关于日期与时间计算的在线工具供大家参考使用:

在线日期/天数计算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi

在线万年历日历:
http://tools.jb51.net/bianmin/wannianli

在线阴历/阳历转换工具:
http://tools.jb51.net/bianmin/yinli2yangli

Unix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android日期与时间操作技巧总结》、《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:

  • Android日期时间格式国际化的实现代码
  • Android开发之时间日期操作实例
  • Android开发之时间日期组件用法实例
  • android获取时间差的方法
  • Android中日期与时间设置控件用法实例
  • Android编程实现根据不同日期计算天数差的方法
  • Android时间选择器、日期选择器实现代码
  • Android日期显示和日期选择库
  • 很实用的Android日期计算类
  • Android时间日期拾取器学习使用(DatePicker、TimePicker)

Android计算两个日期相差天数

Android计算两个日期相差天数

概述

因为没有现成的函数方法可用,那就通过一个循环来取得相差的天数了

Calendar curcalendar= Calendar.getInstance();
int days = 0; //定义一个变量来计算相隔天数
while (lmpcalendar.before(curcalendar)){
    lmpcalendar.add(Calendar.DATE, 1);
    days++;
}

flex计算两个日期之间相差的天数

flex计算两个日期之间相差的天数

 

package common
{

 /**
  *@title as3指定的两个公历日期相差天数类库
  *@author
  *@version 0.1
  *@date 2010.08.17
  *@environment as3.0 FlashPlayer9
  *@调用方式 trace(SelfDateUtil.manyDayNum("20081230","20110317"));
  * */


 public class SelfDateUtil
 {
  public function SelfDateUtil()
  {
  }

  /**
   * 虽然名字为fromFormatDayStr和toFormatDayStr, 单两个参数所代表的开始和结束年份没有先后顺序;如:
   * SelfDateUtil.manyDayNum("20081230","20110317")与SelfDateUtil.manyDayNum("20110317","20081230")等效。
   * */
  public static function manyDayNum(fromFormatDayStr:String,toFormatDayStr:String):Number
  {
   var manyAllDayNum:Number=0; //间隔的天数
   var _fromYear:int=int(fromFormatDayStr.substr(0,4));
   var _toYear:int=int(toFormatDayStr.substr(0,4));
   if (_toYear == _fromYear)
   { //同一年
    manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[0]) - Number(alreadyOverDay(fromFormatDayStr)[0]);
   }
   else if (Math.abs(_toYear - _fromYear) == 1)
   { //相差一年
    if (_toYear > _fromYear)
    {
     manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
    }
    else
    {
     manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
    }
   }
   else
   { //相差两年或者两年以上
    var mangYearNum:Number=Math.abs(Number(_toYear - _fromYear)); //中间间隔的年份
    if (_toYear > _fromYear)
    {
     manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
     for (var i:int=1; i < mangYearNum; i++)
     {
      if (isRunYear(String(_fromYear + i)))
      { //是闰年
       manyAllDayNum+=366;
      }
      else
      { //不是闰年
       manyAllDayNum+=365;
      }
     }
    }
    else
    {
     manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
     for (var j:int=1; j < mangYearNum; j++)
     {
      if (isRunYear(String(_toYear + j)))
      { //是闰年
       manyAllDayNum+=366;
      }
      else
      { //不是闰年
       manyAllDayNum+=365;
      }
     }
    }
   }
   return manyAllDayNum;
  }

 

 

  /**指定的一年之内已经过了多少天了(算上当天),
   *dayStr标准格式为YYYYMMDD,例如:20100816
   *要保证dayStr参数的格式和实际含义正确,如不能出现20100229
   *[0]表示已经过了多少天,[1]表示还剩下多少天 */
  public static function alreadyOverDay(dayFormatStr:String):Array
  {
   var _tempArr:Array=new Array();
   var alreadyDayNum:int=0;
   var _year:int=int(dayFormatStr.substr(0,4));
   var _month:int=int(dayFormatStr.substr(4,2));
   var _day:int=int(dayFormatStr.substr(6,2));
   if (_month == 1)
   {
    alreadyDayNum=_day;
   }
   else if (_month == 3)
   {
    alreadyDayNum=31 + _day;
   }
   else if (_month == 4)
   {
    alreadyDayNum=62 + _day;
   }
   else if (_month == 5)
   {
    alreadyDayNum=92 + _day;
   }
   else if (_month == 6)
   {
    alreadyDayNum=123 + _day;
   }
   else if (_month == 7)
   {
    alreadyDayNum=153 + _day;
   }
   else if (_month == 8)
   {
    alreadyDayNum=184 + _day;
   }
   else if (_month == 9)
   {
    alreadyDayNum=215 + _day;
   }
   else if (_month == 10)
   {
    alreadyDayNum=245 + _day;
   }
   else if (_month == 11)
   {
    alreadyDayNum=276 + _day;
   }
   else if (_month == 12)
   {
    alreadyDayNum=306 + _day;
   }
   if (isRunYear(dayFormatStr))
   { //是闰年
    if (_month == 2)
    {
     alreadyDayNum=31 + _day;
    }
    else if (_month == 1)
    {

    }
    else
    {
     alreadyDayNum+=29;
    }
    _tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
    _tempArr[1]=366 - alreadyDayNum; //还剩多少天没有过
   }
   else
   { //不是闰年
    if (_month == 2)
    {
     alreadyDayNum=31 + _day;
    }
    else if (_month == 1)
    {

    }
    else
    {
     alreadyDayNum+=28;
    }
    _tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
    _tempArr[1]=365 - alreadyDayNum; //还剩多少天没有过
   }
   return _tempArr;
  }

 

  /*指定的一年中过了多少天了,dayStr标准格式为YYYYMMDD,例如:20100816*/
  public static function isRunYear(dayStr:String):Boolean
  {
   var _year:Number=Number(dayStr.substr(0,4));
   if ((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)
   {
    return true;
   }
   else
   {
    return false;
   }
  }
 }

}

今天关于Android计算两个日期之间的天数android计算两个日期之间的天数怎么算的分享就到这里,希望大家有所收获,若想了解更多关于(Java / Android)计算两个日期之间的日期,并以特定格式显示结果、Android编程实现计算两个日期之间天数并打印所有日期的方法、Android计算两个日期相差天数、flex计算两个日期之间相差的天数等相关知识,可以在本站进行查询。

本文标签: