zoukankan      html  css  js  c++  java
  • java 时间处理

    
    import java.text.DateFormatSymbols;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 时间处理类
     * 
     * @author Administrator
     *
     */
    @SuppressWarnings(value={"rawtypes","unused"})
    public class DataOperation {
    	/**
    	 * 查询一个时间段的总周数和查询当前时间是第几周
    	 * 
    	 * @param start
    	 * @param end
    	 * @return
    	 */
    	public static void main(String[] args) {
    
    		System.out.println(DataOperation.getStartEndWeek("2018-4-11", "2018-4-23"));
    		/*
    		 * System.out.println("开始时间: " + cd.getStartDayOfWeekNo(2015, 47));
    		 * System.out.println("结束时间:" + cd.getEndDayOfWeekNo(2015, 47));
    		 * getDates("2013-04-01", "2014-04-14","星期一|星期二|星期日"); //获取某一时间段特定星期几的日期
    		 */
    	}
    	/**
    	 * sjw
    	 * China
    	 * @param start 开始时间 ‘- ’隔开 例如(2018-4-11)不支持时分秒
    	 * @param end 结束时间‘- ’隔开 例如(2018-4-11)不支持时分秒
    	 * @return Map 其中2个Key(WeekStart每周的第一天的List,WeekEnd每周的最后一天的List,WeekCount时间段周数)
    	 */
    	public static Map getStartEndWeek(String start, String end) {
    		
    		String[] starts = start.split("-");
    		String[] ends = end.split("-");
    		int startyear = Integer.parseInt(starts[0]);
    		int startmoune = Integer.parseInt(starts[1]);
    		int startday = Integer.parseInt(starts[2]);
    		int endyear = Integer.parseInt(ends[0]);
    		int endmoune = Integer.parseInt(ends[1]);
    		int endday = Integer.parseInt(ends[2]);
    		Calendar c_begin = new GregorianCalendar();
    		Calendar c_end = new GregorianCalendar();
    		DateFormatSymbols dfs = new DateFormatSymbols();
    		String[] weeks = dfs.getWeekdays();
    
    		c_begin.set(startyear, startmoune - 1, startday); // Calendar的月从0-11,所以4月是3.
    		c_end.set(endyear, endmoune - 1, endday); // Calendar的月从0-11,所以5月是4.
    
    		int count = 1;
    		c_end.add(Calendar.DAY_OF_YEAR, 1); // 结束日期下滚一天是为了包含最后一天
    		Map<String, Object> map = new HashMap<String, Object>();
    		List<String> listend = new ArrayList<String>();
    		List<String> liststart = new ArrayList<String>();
    		while (c_begin.before(c_end)) {
    			/*System.out.println("第" + count + "周  日期:"
    					+ new java.sql.Date(c_begin.getTime().getTime()) + ","
    					+ weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);*/
    
    			if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
    				/*System.out.println("第第" + count + "周  日期:"
    						+ new java.sql.Date(c_begin.getTime().getTime()) + ","
    						+ weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);//每周的最后一天
    */				listend.add(new java.sql.Date(c_begin.getTime().getTime()).toString());
    				count++;
    			}
    			if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
    				liststart.add(new java.sql.Date(c_begin.getTime().getTime()).toString());
    			}
    			c_begin.add(Calendar.DAY_OF_YEAR, 1);
    		}
    		map.put("WeekStart", liststart);
    		map.put("WeekEnd", listend);
    		map.put("WeekCount", count);
    		return map;
    	}
    
    	/**
    	 * get first date of given month and year
    	 * 
    	 * @param year
    	 * @param month
    	 * @return
    	 */
    	public String getFirstDayOfMonth(int year, int month) {
    		String monthStr = month < 10 ? "0" + month : String.valueOf(month);
    		return year + "-" + monthStr + "-" + "01";
    	}
    
    	/**
    	 * get the last date of given month and year
    	 * 
    	 * @param year
    	 * @param month
    	 * @return
    	 */
    	public String getLastDayOfMonth(int year, int month) {
    		Calendar calendar = Calendar.getInstance();
    		calendar.set(Calendar.YEAR, year);
    		calendar.set(Calendar.MONTH, month - 1);
    		calendar.set(Calendar.DATE, 1);
    		calendar.add(Calendar.MONTH, 1);
    		calendar.add(Calendar.DAY_OF_YEAR, -1);
    		return calendar.get(Calendar.YEAR) + "-"
    				+ (calendar.get(Calendar.MONTH) + 1) + "-"
    				+ calendar.get(Calendar.DAY_OF_MONTH);
    	}
    
    	/**
    	 * get Calendar of given year
    	 * 
    	 * @param year
    	 * @return
    	 */
    	private Calendar getCalendarFormYear(int year) {
    		Calendar cal = Calendar.getInstance();
    		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    		cal.set(Calendar.YEAR, year);
    		return cal;
    	}
    
    	/**
    	 * get start date of given week no of a year
    	 * 
    	 * @param year
    	 * @param weekNo
    	 * @return
    	 */
    	public String getStartDayOfWeekNo(int year, int weekNo) {
    		Calendar cal = getCalendarFormYear(year);
    		cal.set(Calendar.WEEK_OF_YEAR, weekNo);
    		return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1)
    				+ "-" + cal.get(Calendar.DAY_OF_MONTH);
    
    	}
    
    	/**
    	 * get the end day of given week no of a year.
    	 * 
    	 * @param year
    	 * @param weekNo
    	 * @return
    	 */
    	public String getEndDayOfWeekNo(int year, int weekNo) {
    		Calendar cal = getCalendarFormYear(year);
    		cal.set(Calendar.WEEK_OF_YEAR, weekNo);
    		cal.add(Calendar.DAY_OF_WEEK, 6);
    		return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1)
    				+ "-" + cal.get(Calendar.DAY_OF_MONTH);
    	}
    
    	/**
    	 * 判断当前日期是星期几
    	 *
    	 * @param pTime
    	 *            修要判断的时间
    	 * @return dayForWeek 判断结果
    	 * @Exception 发生异常
    	 */
    	public int dayForWeek(String pTime) throws Exception {
    		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    		java.util.Calendar c = java.util.Calendar.getInstance();
    		c.setTime(format.parse(pTime));
    		int dayForWeek = 0;
    		if (c.get(java.util.Calendar.DAY_OF_WEEK) == 1) {
    			dayForWeek = 7;
    		} else {
    			dayForWeek = c.get(java.util.Calendar.DAY_OF_WEEK) - 1;
    		}
    		return dayForWeek;
    	}
    
    	/**
    	 * 查询一周的开始时间和结束时间
    	 * 
    	 * @param date
    	 * @return
    	 */
    	private Map<String, Date> onceWeek(Date date) {
    		java.util.Calendar currentDate = new GregorianCalendar();
    		currentDate.setTime(date);
    		currentDate.setFirstDayOfWeek(java.util.Calendar.MONDAY);
    		currentDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
    		currentDate.set(java.util.Calendar.MINUTE, 0);
    		currentDate.set(java.util.Calendar.SECOND, 0);
    		currentDate.set(java.util.Calendar.DAY_OF_WEEK,
    				java.util.Calendar.MONDAY);
    		Date dBegin = (Date) currentDate.getTime().clone();
    
    		currentDate.setFirstDayOfWeek(java.util.Calendar.MONDAY);
    		currentDate.set(java.util.Calendar.HOUR_OF_DAY, 23);
    		currentDate.set(java.util.Calendar.MINUTE, 59);
    		currentDate.set(java.util.Calendar.SECOND, 59);
    		currentDate.set(java.util.Calendar.DAY_OF_WEEK,
    				java.util.Calendar.SUNDAY);
    
    		Date dEnd = (Date) currentDate.getTime().clone();
    
    		// 返回星期天和一个星期的日期和周几
    		Map<String, Date> map = new HashMap<>();
    		map.put("dBegin", dBegin);
    		map.put("dEnd", dEnd);
    		return map;
    	}
    
    	/**
    	 * 获取某一时间段特定星期几的日期
    	 * 
    	 * @param dateFrom
    	 *            开始时间
    	 * @param dateEnd
    	 *            结束时间
    	 * @param weekDays
    	 *            星期
    	 * @return 返回时间数组
    	 */
    	public static String[] getDates(String dateFrom, String dateEnd,
    			String weekDays) {
    		long time = 1l;
    		long perDayMilSec = 24 * 60 * 60 * 1000;
    		List<String> dateList = new ArrayList<String>();
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    		// 需要查询的星期系数
    		String strWeekNumber = weekForNum(weekDays);
    		try {
    			dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
    
    			while (true) {
    				time = sdf.parse(dateFrom).getTime();
    				time = time + perDayMilSec;
    				Date date = new Date(time);
    				dateFrom = sdf.format(date);
    				if (dateFrom.compareTo(dateEnd) <= 0) {
    					// 查询的某一时间的星期系数
    					Integer weekDay = dayForWeek(date);
    					// 判断当期日期的星期系数是否是需要查询的
    					if (strWeekNumber.indexOf(weekDay.toString()) != -1) {
    						//System.out.println(dateFrom);
    						dateList.add(dateFrom);
    					}
    				} else {
    					break;
    				}
    			}
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		String[] dateArray = new String[dateList.size()];
    		dateList.toArray(dateArray);
    		return dateArray;
    	}
    
    	// 等到当期时间的周系数。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
    	public static Integer dayForWeek(Date date) {
    		Calendar calendar = Calendar.getInstance();
    		calendar.setTime(date);
    		return calendar.get(Calendar.DAY_OF_WEEK);
    	}
    
    	/**
    	 * 得到对应星期的系数 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
    	 * 
    	 * @param weekDays
    	 *            星期格式 星期一|星期二
    	 */
    	public static String weekForNum(String weekDays) {
    		// 返回结果为组合的星期系数
    		String weekNumber = "";
    		// 解析传入的星期
    		if (weekDays.indexOf("|") != -1) {// 多个星期数
    			String[] strWeeks = weekDays.split("\|");
    			for (int i = 0; i < strWeeks.length; i++) {
    				weekNumber = weekNumber + ""
    						+ getWeekNum(strWeeks[i]).toString();
    			}
    		} else {// 一个星期数
    			weekNumber = getWeekNum(weekDays).toString();
    		}
    
    		return weekNumber;
    
    	}
    
    	// 将星期转换为对应的系数 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
    	public static Integer getWeekNum(String strWeek) {
    		Integer number = 1;// 默认为星期日
    		if ("星期日".equals(strWeek)) {
    			number = 1;
    		} else if ("星期一".equals(strWeek)) {
    			number = 2;
    		} else if ("星期二".equals(strWeek)) {
    			number = 3;
    		} else if ("星期三".equals(strWeek)) {
    			number = 4;
    		} else if ("星期四".equals(strWeek)) {
    			number = 5;
    		} else if ("星期五".equals(strWeek)) {
    			number = 6;
    		} else if ("星期六".equals(strWeek)) {
    			number = 7;
    		} else {
    			number = 1;
    		}
    		return number;
    	}
    }
    
    
  • 相关阅读:
    CentOS安装部署Nodejs
    CentOS安装部署Git
    CentOS安装部署Mysql 5.7
    CentOS 7 安装Java环境(脚本一键式安装)
    Java技术 | 细谈Java中UUID的简单了解与使用
    Navicat Premium 版本 12.1 激活成永久
    Java技术 | 细谈 Java 8 中的 Base64
    安装部署Elastic Search
    从零开始搭建linux下laravel 5.5所需环境(二)
    从零开始搭建linux下laravel 5.5所需环境(一)
  • 原文地址:https://www.cnblogs.com/yu-du-chen/p/12109030.html
Copyright © 2011-2022 走看看