开发时间的处理

需求:在做类似于微博的android客户端的时候,要求有个定时发微薄功能,时间设置要求:初始化时间大于当前时间两分钟,设置时间不能超过十五天。

解决过程:在网上找了一部分参考资料,发现都不能很好的解决问题,查看了时间的API也没有真正明白用法,据听说java中最让人费解的就是时间处理这块。后来在一个同事的帮助下,找到了思路。

首先:创建一个类继承 OnDateChangedListener OnTimeChangedListener

在代码中初始化时间和日期控件,这里用的是DatePicker和TimePicker

[java]  view plain copy
  1. <span style="font-size:18px;">      Calendar c = Calendar.getInstance();  
  2.         sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  3.         sdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); // 加上这行代码就哦了  
  4.         oldTimeString = sdf.format(c.getTime());  
  5.         //如果不初始化则不会对dataPicker进行监听  
  6.         datePicker.init(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), this);  
  7.         //设置时间大于当前时间两分钟  
  8.         timePicker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));  
  9.         timePicker.setCurrentMinute(c.get(Calendar.MINUTE) + 2);  
  10.         onDateChanged(null000); //通知修改时间为初始化的时间</span>  

这样处理就可以实现初始化时间大于当前时间两分钟,而且实现的是24小时制的模式。

然后就是自己在页面里进行时间的设置,通过监听来实现时时的显示时间信息:

[java]  view plain copy
  1. <span style="font-size:18px;">  @Override  
  2.     public void onDateChanged(DatePicker view, int year, int monthOfYear,  
  3.             int dayOfMonth) {  
  4.         System.out.println("你点击了月份");  
  5.         Calendar calendar = Calendar.getInstance();  
  6.         calendar.set(datePicker.getYear(), datePicker.getMonth(),  
  7.                 datePicker.getDayOfMonth(), timePicker.getCurrentHour(),  
  8.                 timePicker.getCurrentMinute());  
  9.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  10.         sdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));   
  11.         setTimeString = sdf.format(calendar.getTime());  
  12.           
  13.         SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");  
  14.         sdf2.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));  
  15.         textView.setText( sdf2.format(calendar.getTime()) );  
  16.           
  17.     }  
  18.   
  19.     @Override  
  20.     public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {  
  21.         onDateChanged(null000);  
  22.         </span>  
  23.     }  

在点击确定的时候,对设置的时间进行最后的判断,主要是判断时间是否大于15天的问题。

[java]  view plain copy
  1. <span style="font-size:18px;">              DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  2.                 Calendar c1 = Calendar.getInstance();  
  3.                 Calendar c2 = Calendar.getInstance();  
  4.                   
  5.                 try {  
  6.                     /** 
  7.                      * 提前两分钟 
  8.                      */  
  9.                     setTimeDate = df.parse(setTimeString);  
  10.                     c1.setTime(setTimeDate);  
  11.                     c1.add(Calendar.MINUTE, 2);  
  12.                     setTimeDate = c1.getTime();  
  13.                     Date d2 = df.parse(oldTimeString);  
  14.                       
  15.                     /** 
  16.                      * 提前15天零两分钟 
  17.                      */  
  18.                     c2.setTime(d2);  
  19.                     c2.add(Calendar.DAY_OF_MONTH, 15);  
  20.                     c2.add(Calendar.MINUTE, 2);  
  21.                     Date oldTimeDate = c2.getTime();  
  22.                     /** 
  23.                      * setTimeDate设置时间  
  24.                      * oldTimeDate当前时间 + 十五天零两分钟 
  25.                      * oldTimeDate - setTimeDate   > 0 说明设置时间小于十五天 
  26.                      *         = 0 说明设置时间等于15天 
  27.                      *         < 0 说明设置时间大于15天 
  28.                      */  
  29.                     diff = oldTimeDate.getTime() - setTimeDate.getTime()  ;  
  30.                       
  31.                       
  32.                 } catch (Exception e) {  
  33.                     System.out.println("e=" + e);  
  34.                 }</span>  

这种加减时间的方式才是正确的,现实的时候不会出现时间错乱的问题。

通过对diff的比较大小就可以达到了时间不能超过十五天的目的。

[java]  view plain copy
  1. <span style="font-size:18px;">              /** 
  2.                  * diff属于毫秒的差值   如果小于零说明设置时间大于15天 自动把时间调整到第十五天 
  3.                  *                     如果大于大于15 * 1000 * 24 * 60 * 60 + 2 * 60 * 1000 说明设置时间小于当前时间 则自动把时间设置到当前时间 
  4.                  * 这里又考虑到有两分钟的差值    
  5.                  */  
  6.                 if (diff > 0) {  
  7.                     if (diff <= (15 * 1000 * 24 * 60 * 60 + 2 * 60 * 1000)) {  
  8.                         Intent intent = new Intent(SetTimes.this, SendMicoBlog.class);  
  9.                         Bundle bundle = new Bundle();  
  10.                         /* 
  11.                          * new一个Bundle对象,并将要传递的数据传入 
  12.                          */  
  13.                         bundle.putInt("hour", timePicker.getCurrentHour());  
  14.                         bundle.putInt("minute", timePicker.getCurrentMinute());  
  15.                         bundle.putInt("year", datePicker.getYear());  
  16.                         bundle.putInt("month", datePicker.getMonth() + 1);  
  17.                         bundle.putInt("date", datePicker.getDayOfMonth());  
  18.                         bundle.putLong("diff", setTimeDate.getTime());  
  19.                         System.out.println(datePicker.getMonth() + "month");  
  20.                         intent.putExtras(bundle);  
  21.                         setResult(3, intent);  
  22.                         SetTimes.this.finish();  
  23.                     } else {  
  24.                           
  25.                         Calendar c3 = Calendar.getInstance();  
  26.                         datePicker.init(c3.get(Calendar.YEAR), c3.get(Calendar.MONTH), c3.get(Calendar.DAY_OF_MONTH), SetTimes.this);  
  27.                         timePicker.setCurrentHour(c3.get(Calendar.HOUR_OF_DAY));  
  28.                         timePicker.setCurrentMinute(c3.get(Calendar.MINUTE) + 2);  
  29.                         Toast.makeText(SetTimes.this"设置时间应该大于零", Toast.LENGTH_SHORT).show();  
  30.                     }  
  31.                 } else {  
  32.                     datePicker.init(c2.get(Calendar.YEAR), c2.get(Calendar.MONTH), c2.get(Calendar.DAY_OF_MONTH), SetTimes.this);  
  33.                     timePicker.setCurrentHour(c2.get(Calendar.HOUR_OF_DAY));  
  34.                     timePicker.setCurrentMinute(c2.get(Calendar.MINUTE) - 3);  
  35.                     Toast.makeText(SetTimes.this"设置时间应该小于等于15天", Toast.LENGTH_SHORT).show();  
  36.                 }  
  37.                 onDateChanged(null000);</span>  

在时间不满足的情况下,做了两个处理,第一:如果小于当前时间则把时间调整到当前时间加两分钟;第二:如果设置时间大于15天,则把时间调整到第十五天的时间。最终问题最终得到解决
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值