跪求一个JAVA 日期程序

沉沦 2015-01-26 10:05:39
1. 大家都知道一年当中有很多周,例如1周,2周,,,31周,,,40周.(记得周期不能超过当年的最大周数)
2. 我需要传递一个周期的整数.例如 25. 返回这周的第一天是多少号,最后一天是多少号.(时间格式为2015-01-01 00:00:00)
3. 我的每周范围不是星期一到星期日, 而是这星期5到下到个星期4 为一周!
4.最好给我一个方法,我只需要传递一个整数.就能return给我一个这周的开始时间和结束时间!
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shixitong 2015-01-26
  • 打赏
  • 举报
回复
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;

public class DateUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		//调用,取2015年的第51周的开始日期和结束日期
		Map<String, String> map=getSpecialDates(2015,6,51);
		System.out.println(map);
		//{startDate=2015-12-18, endDate=2015-12-24}
	}

	/**
	 * @param year 哪一年的,格式2014、2015这些<br>
	 * @param startOfweek 星期几算我们星期的开头,比如星期五,对应的数字就是6,星期四对应的就是5……<br>
	 * @param weekIndex 第几周的索引<br>
	 * @return 这一周开始日期和结束日期的map<br>
	 */
	public static Map<String, String> getSpecialDates(int year, int startOfweek,int weekIndex) {
		Map<Integer, Map<String, String>> map=getYearWeeks(year,startOfweek);
		if(map!=null){
			return map.get(weekIndex);
		}
		return null;
	}

	/**
	 * 获得某一年的所有周数<br>
	 * @param year 年份,格式2014、2015<br>
	 * @param startOfWeek 星期几算我们星期的开头,比如星期五,对应的数字就是6,星期四对应的就是5……<br>
	 * @return  
	 */
	public static Map<Integer, Map<String, String>> getYearWeeks(int year,int startOfWeek) {
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
		Map<Integer, Map<String, String>> retMap = new HashMap<Integer, Map<String, String>>();
		//定义开始的calendar
		Calendar calendar = new GregorianCalendar();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, 0);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		//定义结束的calendar
		Calendar calendarEnd = new GregorianCalendar();
		calendarEnd.set(Calendar.YEAR, year);
		calendarEnd.set(Calendar.MONTH, 11);
		calendarEnd.set(Calendar.DAY_OF_MONTH, 31);
		int count=1;
		while (calendar.getTime().getTime() <= calendarEnd.getTime().getTime()) {
			if (calendar.get(Calendar.DAY_OF_WEEK) == startOfWeek) {
				String startDate=sf.format(calendar.getTime());
				calendar.add(Calendar.DAY_OF_MONTH, 6);
				String endDate=sf.format(calendar.getTime());
				if(calendar.YEAR>year){
					break;
				}
				else{
					Map<String,String> innerMap = new HashMap<String,String>();
					innerMap.put("startDate", startDate);
					innerMap.put("endDate", endDate);
					retMap.put(count, innerMap);
					count++;
				}
			}
			else{
				calendar.add(Calendar.DAY_OF_MONTH, 1);
			}
		}
		return retMap;
	}

}
zhangcong201301 2015-01-26
  • 打赏
  • 举报
回复

public class Test {
    static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * No-arg constructor
     */
    public Test() {
    }

    /**
     * TODO
     * 
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub       
        Map<String, Date> result = DateUtil.getWeekDates(2014, 1);
        System.out.println(format.format(result.get("startDate")));
        System.out.println(format.format(result.get("endDate")));
    }
}

class DateUtil {
    public static Map<String, Date> getWeekDates(int year, int numOfWeek) {
        if (numOfWeek > 52 || numOfWeek < 0) {
            new IllegalArgumentException("Invalid parameter!");
        }
        Calendar calendar = new GregorianCalendar();
        Map<String, Date> result = new HashMap<String, Date>();
        int month = 0;
        int day = 1;
        calendar.set(year, month, day, 0, 0, 0);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        int offset = dayOfWeek - 6;
        calendar.set(Calendar.DAY_OF_MONTH, day - offset);
        calendar.add(Calendar.DAY_OF_YEAR, (numOfWeek - 1) * 7);
        result.put("startDate", calendar.getTime());
        calendar.add(Calendar.DAY_OF_YEAR, numOfWeek * 7);
        result.put("endDate", calendar.getTime());
        return result;
    }
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧