求个时间算法。

bx_521 2013-08-28 04:28:48
需求:求近一年的每周的周一,周日的日期格式为yyyy-MM-dd.

1:近一年为系统当前日期一直到去年的当前日期:例如,当前日期为2013-08-28,则需要从2012-08-28所在周的周一开始算起,一直到2013-08-28所在周,其中需要每周的周一和周日日期。


2:求某年每个月的第一天和最后一天(共12个月)。
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bx_521 2013-08-29
  • 打赏
  • 举报
回复
引用 3 楼 preferme 的回复:
啥也不说,直接上代码。
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


public class Test_11 {

	private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
	
	/**
	 * 测试用例
	 */
	public static void main(String[] args) {
		List<String> days1 = findDays_1(new Date());
		for(String day : days1){
			System.out.println(day);
		}
		System.out.println("-------- 我是分割线 -----------");
		List<String> days2 = findDays_2(2013);
		for(String day : days2){
			System.out.println(day);
		}
	}

	public static List<String> findDays_1(Date day){
		ArrayList<String> days = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		cal.setTime(day);
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		cal.add(Calendar.DAY_OF_MONTH, 1);
		Date end = cal.getTime();
		cal.setTime(day);
		cal.add(Calendar.YEAR, -1);
		Date cur = null;
		do{
			cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
//			Date monday = cal.getTime();
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.DAY_OF_MONTH, 6);
			cur = cal.getTime();
			days.add(SDF.format(cur));
		}while(cur.before(end));
		return days;
	}
	
	public static List<String> findDays_2(int year){
		ArrayList<String> days = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		for(int i=0;i<12;i++){
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.MONTH, 1);
			cal.add(Calendar.DAY_OF_MONTH, -1);
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.DAY_OF_MONTH, 1);
		}
		return days;
	}
	
}
谢谢 很受益
冰思雨 2013-08-28
  • 打赏
  • 举报
回复
啥也不说,直接上代码。
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


public class Test_11 {

	private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
	
	/**
	 * 测试用例
	 */
	public static void main(String[] args) {
		List<String> days1 = findDays_1(new Date());
		for(String day : days1){
			System.out.println(day);
		}
		System.out.println("-------- 我是分割线 -----------");
		List<String> days2 = findDays_2(2013);
		for(String day : days2){
			System.out.println(day);
		}
	}

	public static List<String> findDays_1(Date day){
		ArrayList<String> days = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		cal.setTime(day);
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		cal.add(Calendar.DAY_OF_MONTH, 1);
		Date end = cal.getTime();
		cal.setTime(day);
		cal.add(Calendar.YEAR, -1);
		Date cur = null;
		do{
			cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
//			Date monday = cal.getTime();
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.DAY_OF_MONTH, 6);
			cur = cal.getTime();
			days.add(SDF.format(cur));
		}while(cur.before(end));
		return days;
	}
	
	public static List<String> findDays_2(int year){
		ArrayList<String> days = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		for(int i=0;i<12;i++){
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.MONTH, 1);
			cal.add(Calendar.DAY_OF_MONTH, -1);
			days.add(SDF.format(cal.getTime()));
			cal.add(Calendar.DAY_OF_MONTH, 1);
		}
		return days;
	}
	
}
lcf 2013-08-28
  • 打赏
  • 举报
回复
1. 用calendar接口,先算一年内第一个周一,然后循环加7即可(注意闰年与平年,每加一周就用calendar算算看超过今天日期没,虽然比较慢,但是比较方便可靠) 2. 还是用Calendar接口,前一个月得最后一天就是后一个月的第一天减一,所以求出(每个月的第一天再减一 + 7)% 7就行了
  • 打赏
  • 举报
回复
用calendar接口。

62,615

社区成员

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

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