这篇文章主要介绍了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<p style="color:transparent">本文来源gao!%daima.com搞$代*!码网1</p>:起止月份, 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); }}