• 技术文章 >Java >java教程

    Java实现开发基础日期类的示例详解

    黄舟黄舟2017-10-18 10:14:39原创553
    这篇文章主要介绍了Java开发基础日期类的相关内容,代码通过日期工具类获取指定月份的星期与日期对应关系,以及获取指定月份的所有日期与星期集合等,具有一定参考价值,需要的朋友可以了解下。

    由于工作关系,很久没更新博客了,今天就给大家带来一篇Java实现获取指定月份的星期与日期对应关系的文章,好了,不多说,我们直接上代码:

    一、日期工具类


    package com.lyz.date;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.chwl.medical.utils.common.CollectionUtils;
    import com.chwl.medical.utils.common.ObjectUtils;
    /**
     * 日期工具类,获取指定月份的星期与日期的对应关系
     * @author liuyazhuang
     *
     */
    public class DateUtils {
    	public static final String DATE_FORMAT = "yyyy-MM-dd";
    	public enum Type{
    		Year, Month, Date
    	}
    	/**
    	 * 获取两个时间之间的年份
    	 * @param startDate
    	 * @param endDate
    	 * @return
    	 */
    	public static int getYears(Date startDate, Date endDate, Type type){
    		int count = 0;
    		 Calendar calBegin = Calendar.getInstance(); //获取日历实例 
    		 Calendar calEnd = Calendar.getInstance(); 
    		 calBegin.setTime(startDate);
    		 calEnd.setTime(endDate);
    		 if(Type.Year == type){
    			 count = calEnd.get(Calendar.YEAR) - calBegin.get(Calendar.YEAR); 
    		 }else if(Type.Month == type){
    			 count = calEnd.get(Calendar.MONTH) - calBegin.get(Calendar.MONTH); 
    		 }else{
    			 count = calEnd.get(Calendar.DATE) - calBegin.get(Calendar.DATE); 
    		 }
    		 return count;
    	}
    	/**
    	 * 获取指定月份的所有日期和星期集合
    	 * @param offset:起止月份, 0:当前月, 1:下一个月; 2下下月; 以此类推... -1:上一个月; -2:上上一个月 ; 以此类推....
    	 * @param length:终止月份, 0:当前月, 1:下一个月; 2下下月; 以此类推... -1:上一个月; -2:上上一个月 ; 以此类推....
    	 * @return:日期和星期集合:星期为key 日期为value
    	 */
    	public static Map<String, List<String>> getKeyFromMapByValue(int offset, int length){
    		return getKeyFromMapByValue(getDateKeyWeekValue(offset, length));
    	}
    	/**
    	 * 将以date为key, week为value的map转化为以week为key, date为value的map
    	 * @param dateWeek
    	 * @return
    	 */
    	public static Map<String, List<String>> getKeyFromMapByValue(Map<String, String> dateWeek){
    		Map<String, List<String>> weekDate = new HashMap<String, List<String>>();
    		if(!CollectionUtils.isEmpty(dateWeek)){
    			for(Map.Entry<String, String> entry : dateWeek.entrySet()){
    				//获取日期集合
    				List<String> list = weekDate.get(entry.getValue());
    				if(ObjectUtils.isEmpty(list)){
    					list = new ArrayList<String>();
    				}
    				list.add(entry.getKey());
    				weekDate.put(entry.getValue(), list);
    			}
    		}
    		return weekDate;
    	}
    	/**
    	 * 获取指定月份的所有日期和星期集合
    	 * @param offset:起止月份, 0:当前月, 1:下一个月; 2下下月; 以此类推... -1:上一个月; -2:上上一个月 ; 以此类推....
    	 * @param length:终止月份, 0:当前月, 1:下一个月; 2下下月; 以此类推... -1:上一个月; -2:上上一个月 ; 以此类推....
    	 * @return:日期和星期集合:日期为key 星期为value
    	 */
    	public static Map<String, String> getDateKeyWeekValue(int offset, int length){
    		Map<String, String> map = new HashMap<String, String>();
    		for(int i = offset; i <= length; i++){
    			List<Date> list = getAllTheDateOftheMonth(new Date(),i);
    			for(Date date: list){
    				String weekDay = getDateOfWeek(date);
    				map.put(parseDateToString(date, DATE_FORMAT), weekDay);
    			}
    		}
    		return map;
    	}
    	/**
    	 * 获取当前日期所在月份的所有日期,指定月份的所有日期
    	 * @param date:当前日期
    	 * @param n:1下一月;2:下下月..以此类推; -1:上月,-2:上上月...以此类推
    	 * @return:返回指定月份的所有日期
    	 */
    	public static List<Date> getAllTheDateOftheMonth(Date date, int n) {
    		List<Date> list = new ArrayList<Date>();
    		Calendar cal = Calendar.getInstance();
    		cal.setTime(date);
    		cal.set(Calendar.DATE, 1);
    		cal.add(Calendar.MONTH, n);
    		int month = cal.get(Calendar.MONTH);
    		while(cal.get(Calendar.MONTH) == month){
    			list.add(cal.getTime());
    			cal.add(Calendar.DATE, 1);
    		}
    		return list;
    	}
    	/**
    	 * 根据日期获得星期
    	 * @param date
    	 * @return
    	 */
    	public static String getDateOfWeek(Date date) {
    		//String[] weekDaysName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
    		String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
    		Calendar calendar = Calendar.getInstance();
    		calendar.setTime(date);
    		int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
    		if(intWeek < 0) intWeek = 0;
    		return weekDaysCode[intWeek];
    	}
    	public static String parseDateToString(Date date, String formatString) {
    		return getSimpleDateFormat(formatString).format(date);
    	}
    	public static SimpleDateFormat getSimpleDateFormat(String formatString) {
    		return new SimpleDateFormat(formatString);
    	}
    }

    二、测试类


    package com.lyz.date; 
    import net.sf.json.JSONObject; 
    /** 
     * 测试工具类 
     * @author liuyazhuang 
     * 
     */ 
    public class TestDate { 
      public static void main(String[] args) { 
        System.out.println(JSONObject.fromObject(DateUtils.getDateKeyWeekValue(-1, 1))); 
        System.out.println(JSONObject.fromObject(DateUtils.getKeyFromMapByValue(-1,1))); 
      } 
    }

    三、测试结果


    {
      "2017-02-28": "2",
      "2017-04-19": "3",
      "2017-04-17": "1",
      "2017-02-25": "6",
      "2017-04-18": "2",
      "2017-02-24": "5",
      "2017-04-15": "6",
      "2017-02-27": "1",
      "2017-04-16": "0",
      "2017-02-26": "0",
      "2017-04-13": "4",
      "2017-02-21": "2",
      "2017-04-14": "5",
      "2017-02-20": "1",
      "2017-04-11": "2",
      "2017-02-23": "4",
      "2017-04-12": "3",
      "2017-02-22": "3",
      "2017-04-21": "5",
      "2017-04-20": "4",
      "2017-04-08": "6",
      "2017-04-09": "0",
      "2017-04-04": "2",
      "2017-04-05": "3",
      "2017-04-06": "4",
      "2017-04-07": "5",
      "2017-04-01": "6",
      "2017-04-02": "0",
      "2017-04-03": "1",
      "2017-04-10": "1",
      "2017-02-07": "2",
      "2017-02-06": "1",
      "2017-02-09": "4",
      "2017-02-08": "3",
      "2017-03-29": "3",
      "2017-03-25": "6",
      "2017-03-26": "0",
      "2017-03-27": "1",
      "2017-02-01": "3",
      "2017-03-28": "2",
      "2017-03-21": "2",
      "2017-02-03": "5",
      "2017-03-22": "3",
      "2017-02-02": "4",
      "2017-03-23": "4",
      "2017-02-05": "0",
      "2017-03-24": "5",
      "2017-02-04": "6",
      "2017-03-31": "5",
      "2017-03-30": "4",
      "2017-04-23": "0",
      "2017-04-22": "6",
      "2017-02-19": "0",
      "2017-04-25": "2",
      "2017-02-18": "6",
      "2017-04-24": "1",
      "2017-02-17": "5",
      "2017-04-27": "4",
      "2017-04-26": "3",
      "2017-04-29": "6",
      "2017-03-18": "6",
      "2017-04-28": "5",
      "2017-03-19": "0",
      "2017-02-12": "0",
      "2017-03-16": "4",
      "2017-02-11": "6",
      "2017-03-17": "5",
      "2017-02-10": "5",
      "2017-03-14": "2",
      "2017-03-15": "3",
      "2017-02-16": "4",
      "2017-03-12": "0",
      "2017-02-15": "3",
      "2017-03-13": "1",
      "2017-02-14": "2",
      "2017-03-10": "5",
      "2017-02-13": "1",
      "2017-03-11": "6",
      "2017-03-20": "1",
      "2017-03-09": "4",
      "2017-03-08": "3",
      "2017-03-07": "2",
      "2017-03-06": "1",
      "2017-03-05": "0",
      "2017-03-04": "6",
      "2017-03-03": "5",
      "2017-03-02": "4",
      "2017-04-30": "0",
      "2017-03-01": "3"
    }


    {
      "3": [
        "2017-04-19",
        "2017-04-12",
        "2017-02-22",
        "2017-04-05",
        "2017-02-08",
        "2017-03-29",
        "2017-02-01",
        "2017-03-22",
        "2017-04-26",
        "2017-03-15",
        "2017-02-15",
        "2017-03-08",
        "2017-03-01"
      ],
      "2": [
        "2017-02-28",
        "2017-04-18",
        "2017-02-21",
        "2017-04-11",
        "2017-04-04",
        "2017-02-07",
        "2017-03-28",
        "2017-03-21",
        "2017-04-25",
        "2017-03-14",
        "2017-02-14",
        "2017-03-07"
      ],
      "1": [
        "2017-04-17",
        "2017-02-27",
        "2017-02-20",
        "2017-04-03",
        "2017-04-10",
        "2017-02-06",
        "2017-03-27",
        "2017-04-24",
        "2017-03-13",
        "2017-02-13",
        "2017-03-20",
        "2017-03-06"
      ],
      "0": [
        "2017-04-16",
        "2017-02-26",
        "2017-04-09",
        "2017-04-02",
        "2017-03-26",
        "2017-02-05",
        "2017-04-23",
        "2017-02-19",
        "2017-03-19",
        "2017-02-12",
        "2017-03-12",
        "2017-03-05",
        "2017-04-30"
      ],
      "6": [
        "2017-02-25",
        "2017-04-15",
        "2017-04-08",
        "2017-04-01",
        "2017-03-25",
        "2017-02-04",
        "2017-04-22",
        "2017-02-18",
        "2017-04-29",
        "2017-03-18",
        "2017-02-11",
        "2017-03-11",
        "2017-03-04"
      ],
      "5": [
        "2017-02-24",
        "2017-04-14",
        "2017-04-21",
        "2017-04-07",
        "2017-02-03",
        "2017-03-24",
        "2017-03-31",
        "2017-02-17",
        "2017-04-28",
        "2017-03-17",
        "2017-02-10",
        "2017-03-10",
        "2017-03-03"
      ],
      "4": [
        "2017-04-13",
        "2017-02-23",
        "2017-04-20",
        "2017-04-06",
        "2017-02-09",
        "2017-02-02",
        "2017-03-23",
        "2017-03-30",
        "2017-04-27",
        "2017-03-16",
        "2017-02-16",
        "2017-03-09",
        "2017-03-02"
      ]
    }

    总结

    本文通过代码示例向大家展示了日期工具类的几种用法,希望对大家学习Java有所帮助。

    以上就是Java实现开发基础日期类的示例详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Java 日期 基础
    上一篇:Java中泛型限定的代码分享 下一篇:Java实现10-100000之间的水仙花数算法的示例
    千万级数据并发解决方案

    相关文章推荐

    • 一起来理解Java中的泛型• 整理分享Java语言表达式的五个谜题• java反射机制详细解析(总结分享)• 快速上手Java数据结构之字符串• 详细整理java枚举的使用总结
    1/1

    PHP中文网