zoukankan      html  css  js  c++  java
  • 按周期获取时间范围(按年、按月、按天、按小时)

    package ham;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class TimeTest {
    
    	/**
    	 * @param args
    	 * @throws ParseException
    	 */
    	public static void main(String[]args)throws ParseException {
    		getLevelTime("2012-01-01 10:43:07", "2012-01-02 05:23:56", "hour");
    
    	}
    
    	public static void getLevelTime(String startTimeStr, String endTimeStr, String type)throws ParseException {
    		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		Date startTime = dateFormat.parse(startTimeStr);
    		Date endTime = dateFormat.parse(endTimeStr);
    		Calendar startCal = Calendar.getInstance();
    		Calendar endCal = Calendar.getInstance();
    		startCal.setTime(startTime);
    		endCal.setTime(endTime);
    
    		if ("year".equals(type)) {
    
    			//判断是否在同一年
    			if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR)) {
    				System.out.println("同一年内");
    			} else {
    				//最开始一年最后时刻,月份比正常认知少一个数
    				Calendar startCal_ = Calendar.getInstance();
    				startCal_.set(startCal.get(Calendar.YEAR), 11, 31, 23, 59, 59);
    				//最后一年开始时刻
    				Calendar endCal_ = Calendar.getInstance();
    				endCal_.set(endCal.get(Calendar.YEAR), 0, 1, 0, 0, 0);
    
    				//开始时间
    				System.out.print(dateFormat.format(startCal.getTime()) + "---");
    				//最开始一年  末尾
    				System.out.println(dateFormat.format(startCal_.getTime()));
    
    				//中间年数
    				int count = (int)(((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000)) / 365);
    				for (int j = 0; j < count; j++) {
    					//第n年  起始
    					startCal_.set(Calendar.SECOND, 60);
    					System.out.print(dateFormat.format(startCal_.getTime()) + "---");
    
    					//第n年 末尾
    					startCal_.set(Calendar.YEAR, startCal_.get(Calendar.YEAR));
    					startCal_.set(Calendar.MONTH, 11); //  ***月份设置***
    					startCal_.set(Calendar.DATE, 31);
    					startCal_.set(Calendar.HOUR, 23);
    					startCal_.set(Calendar.MINUTE, 59);
    					startCal_.set(Calendar.SECOND, 59);
    					System.out.println(dateFormat.format(startCal_.getTime()));
    				}
    
    				//最后一年  开始
    				System.out.print(dateFormat.format(endCal_.getTime()) + "---");
    				//结束时间
    				System.out.println(dateFormat.format(endCal.getTime()));
    
    			}
    
    		}
    
    		if ("month".equals(type)) {
    
    			//判断是否在同一年
    			if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH)) {
    				System.out.println("同一月内");
    			} else {
    				//最开始一个月最后时刻,重点在于设置一个月中的天数(每个月的天数不同)
    				Calendar startCal_ = Calendar.getInstance();
    				startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.getActualMaximum(Calendar.DATE), 23, 59, 59);
    				//最后一个月开始时刻
    				Calendar endCal_ = Calendar.getInstance();
    				endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), 1, 0, 0, 0);
    
    				//开始时间
    				System.out.print(dateFormat.format(startCal.getTime()) + "---");
    				//最开始一个月  末尾
    				System.out.println(dateFormat.format(startCal_.getTime()));
    
    				//中间月数
    				int count = (int)(((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000)) / 30);
    				for (int j = 0; j < count; j++) {
    					//第n个月  起始
    					startCal_.set(Calendar.SECOND, 60);
    					System.out.print(dateFormat.format(startCal_.getTime()) + "---");
    
    					//第n个月 末尾
    					startCal_.set(Calendar.MONTH, startCal_.get(Calendar.MONTH));
    					//根据具体时间获取其所在月的天数 ***
    					startCal_.set(Calendar.DATE, startCal_.getActualMaximum(Calendar.DATE));
    					startCal_.set(Calendar.HOUR, 23);
    					startCal_.set(Calendar.MINUTE, 59);
    					startCal_.set(Calendar.SECOND, 59);
    					System.out.println(dateFormat.format(startCal_.getTime()));
    				}
    
    				//最后一个月  开始
    				System.out.print(dateFormat.format(endCal_.getTime()) + "---");
    				//结束时间
    				System.out.println(dateFormat.format(endCal.getTime()));
    
    			}
    
    		} else if ("day".equals(type)) {
    
    			//判断是否在同一天
    			if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH) && startCal.get(Calendar.DATE) == endCal.get(Calendar.DATE)) {
    				System.out.println("同一天内");
    			} else {
    				//第一天最后时刻
    				Calendar startCal_ = Calendar.getInstance();
    				startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DATE), 23, 59, 59);
    				//最后一天开始时刻
    				Calendar endCal_ = Calendar.getInstance();
    				endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DATE), 0, 0, 0);
    
    				//开始时间
    				System.out.print(dateFormat.format(startCal.getTime()) + "---");
    				//第一天  末尾
    				System.out.println(dateFormat.format(startCal_.getTime()));
    
    				//中间天数
    				int count = (int)((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000));
    				for (int j = 0; j < count; j++) {
    					//第n天  起始
    					startCal_.set(Calendar.SECOND, 60);
    					System.out.print(dateFormat.format(startCal_.getTime()) + "---");
    
    					//第n天 末尾
    					startCal_.set(Calendar.DATE, startCal_.get(Calendar.DATE));
    					startCal_.set(Calendar.HOUR, 23);
    					startCal_.set(Calendar.MINUTE, 59);
    					startCal_.set(Calendar.SECOND, 59);
    					System.out.println(dateFormat.format(startCal_.getTime()));
    				}
    
    				//最后一天  开始
    				System.out.print(dateFormat.format(endCal_.getTime()) + "---");
    				//结束时间
    				System.out.println(dateFormat.format(endCal.getTime()));
    
    			}
    
    		} else if ("hour".equals(type)) {
    
    			//判断是否在同一小时
    			if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH) && startCal.get(Calendar.DATE) == endCal.get(Calendar.DATE) && startCal.get(Calendar.HOUR) == endCal.get(Calendar.HOUR)) {
    				System.out.println("同一小时内");
    			} else {
    				//最开始一小时最后时刻
    				Calendar startCal_ = Calendar.getInstance();
    				startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DATE), startCal.get(Calendar.HOUR_OF_DAY), 59, 59);
    				//最后一小时开始时刻
    				Calendar endCal_ = Calendar.getInstance();
    				endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DATE), endCal.get(Calendar.HOUR_OF_DAY), 0, 0);
    
    				//开始时间
    				System.out.print(dateFormat.format(startCal.getTime()) + "---");
    				//最开始一小时  末尾
    				System.out.println(dateFormat.format(startCal_.getTime()));
    
    				//中间小时数
    				int count = (int)((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (60 * 60 * 1000));
    				for (int j = 0; j < count; j++) {
    					//第n个小时  起始
    					startCal_.set(Calendar.SECOND, 60);
    					System.out.print(dateFormat.format(startCal_.getTime()) + "---");
    
    					//第n个小时 末尾
    					startCal_.set(Calendar.HOUR, startCal_.get(Calendar.HOUR));
    					startCal_.set(Calendar.MINUTE, 59);
    					startCal_.set(Calendar.SECOND, 59);
    					System.out.println(dateFormat.format(startCal_.getTime()));
    				}
    
    				//最后一小时  开始
    				System.out.print(dateFormat.format(endCal_.getTime()) + "---");
    				//结束时间
    				System.out.println(dateFormat.format(endCal.getTime()));
    
    			}
    
    		}
    
    	}
    
    }
    

    ** 几个重点注意的地方:
    1.月份设置(根据实际时间所在的月份设置该月的天数)
        startCal.getActualMaximum(Calendar.DATE)
    2.得到24小时制的小时数值
        Calendar   date   =   Calendar.getInstance();  
        date.get(Calendar.HOUR_OF_DAY   );//得到24小时机制的  
        date.get(Calendar.HOUR);//   得到12小时机制的

  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/hamfy/p/3153002.html
Copyright © 2011-2022 走看看