开发中遇到的关于时间的处理:设置时间范围大于当前时间小于某一天
需求:在做类似于微博的android客户端的时候,要求有个定时发微薄功能,时间设置要求:初始化时间大于当前时间两分钟,设置时间不能超过十五天。
解决过程:在网上找了一部分参考资料,发现都不能很好的解决问题,查看了时间的API也没有真正明白用法,据听说java中最让人费解的就是时间处理这块。后来在一个同事的帮助下,找到了思路。
首先:创建一个类继承 OnDateChangedListener OnTimeChangedListener
在代码中初始化时间和日期控件,这里用的是DatePicker和TimePicker
/** * diff属于毫秒的差值 如果小于零说明设置时间大于15天 自动把时间调整到第十五天 * 如果大于大于15 * 1000 * 24 * 60 * 60 + 2 * 60 * 1000 说明设置时间小于当前时间 则自动把时间设置到当前时间 * 这里又考虑到有两分钟的差值 */if (diff > 0) {if (diff <= (15 * 1000 * 24 * 60 * 60 + 2 * 60 * 1000)) {Intent intent = new Intent(SetTimes.this, SendMicoBlog.class);Bundle bundle = new Bundle();/* * new一个Bundle对象,并将要传递的数据传入 */bundle.putInt("hour", timePicker.getCurrentHour());bundle.putInt("minute", timePicker.getCurrentMinute());bundle.putInt("year", datePicker.getYear());bundle.putInt("month", datePicker.getMonth() + 1);bundle.putInt("date", datePicker.getDayOfMonth());bundle.putLong("diff", setTimeDate.getTime());System.out.println(datePicker.getMonth() + "month");intent.putExtras(bundle);setResult(3, intent);SetTimes.this.finish();} else {Calendar c3 = Calendar.getInstance();datePicker.init(c3.get(Calendar.YEAR), c3.get(Calendar.MONTH), c3.get(Calendar.DAY_OF_MONTH), SetTimes.this);timePicker.setCurrentHour(c3.get(Calendar.HOUR_OF_DAY));timePicker.setCurrentMinute(c3.get(Calendar.MINUTE) + 2);Toast.makeText(SetTimes.this, "设置时间应该大于零", Toast.LENGTH_SHORT).show();}} else {datePicker.init(c2.get(Calendar.YEAR), c2.get(Calendar.MONTH), c2.get(Calendar.DAY_OF_MONTH), SetTimes.this);timePicker.setCurrentHour(c2.get(Calendar.HOUR_OF_DAY));timePicker.setCurrentMinute(c2.get(Calendar.MINUTE) - 3);Toast.makeText(SetTimes.this, "设置时间应该小于等于15天", Toast.LENGTH_SHORT).show();}onDateChanged(null, 0, 0, 0);