以下代码是计算两个日期之间的天数,并打印所有日期
注:开始时,增加天数时,一天的毫秒数直接用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
public class MainActivity extends AppCompatActivity { private static final long ONE_DAY_MS = 24*60*60*1000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { betweenDays(dateToStamp("2019-04-05"), dateToStamp("2019-05-08")); } catch (ParseException e) { e.printStackTrace(); } } /* * 将时间转换为时间戳 */ public long dateToStamp(String time) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = simpleDateFormat.parse(time); long ts = date.getTime(); return ts; } /** * 计算两个日期之间的日期 * @param startTime * @param endTime */ private void betweenDays(long startTime,long endTime){ 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("打印日期",getCustonFormatTime(todayDate,"yyyy-MM-dd")); //取出多少号 添加集合 九宫格展示 } }else {//此时在同一天之内 Log.i("打印日期",getCustonFormatTime(startTime,"yyyy-MM-dd")); } } /** * 格式化传入的时间 * * @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); } }