论坛首页 Java企业应用论坛

求某年52(53)个星期的开始结束日期

浏览 2385 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-04  

 题外话:如果某一年的第一天,也就是1月1日元旦这天是星期日的话,那么这一年的星期总数绝对为53周。你可以数一数哦。

有些时侯,我们需要统计某个时间段的用户操作XX或登录次数的一个统计,不按天为单位,加入统计一年内的某个用户每个星期登录的次数,那么我们就需要这一年(52、53)星期的开始时间和结束时间,sql语句来where date between '开始时间' and '结束时间'

 

详细源码如下:

/**
 * 存储每周开始和结束日期的javabean
 */
public class TimeBean{
	
	private String startDate = "";//开始时间
	
	private String endDate = "";//结束时间

	public String getEndDate() {
		return endDate;
	}

	public void setEndDate(String endDate) {
		this.endDate = endDate;
	}

	public String getStartDate() {
		return startDate;
	}

	public void setStartDate(String startDate) {
		this.startDate = startDate;
	}
}

 

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class Time {

	protected Calendar date = null;

	protected SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

	Map<Integer, TimeBean> map = new LinkedHashMap<Integer, TimeBean>();

	public Map<Integer, TimeBean> getMap() {
		return map;
	}

	public void setMap(Map<Integer, TimeBean> map) {
		this.map = map;
	}

	public Time(int year) {
		date = Calendar.getInstance();
		date.set(Calendar.YEAR, year);
		//给日历字段设置这段时间可能的最大值
		int maxweek = date.getActualMaximum(Calendar.WEEK_OF_YEAR);
		 System.out.println("本年中最多的星期数为:" + maxweek );
		date.set(Calendar.WEEK_OF_YEAR, maxweek);// 设置当前日期为此年的第一周
		for (int i = 1; i <= maxweek; i++) {
			TimeBean bean = new TimeBean();
			date.set(Calendar.DAY_OF_WEEK, 1);// 设置当前日期为每周的第一天,即周日
			date.set(Calendar.WEEK_OF_YEAR, i);
			String startTime = dateFormat.format(date.getTime());
			bean.setStartDate(startTime);
			date.set(Calendar.DAY_OF_WEEK, 7);// 设置当前日期为每周的第一天,即周日
			bean.setEndDate(dateFormat.format(date.getTime()));

			map.put(i, bean);
		}
	}

	public static void main(String[] args) {

		Time time = new Time(2008);
		Map<Integer, TimeBean> mp = time.getMap();
		Set set = mp.entrySet();
		for (Iterator iter = set.iterator(); iter.hasNext();) {
			Entry entry = (Entry) iter.next();
			TimeBean bean = (TimeBean) entry.getValue();
			System.out.println("星期:" + entry.getKey() + ",开始时间为:"
					+ bean.getStartDate() + ",结束时间为:" + bean.getEndDate());
		}
		
	}

}

 

说明:本例是以2008年为例:打印处的结果为:

本年中最多的星期数为:52
星期:1,开始时间为:2007-12-30,结束时间为:2008-01-05
星期:2,开始时间为:2008-01-06,结束时间为:2008-01-12
星期:3,开始时间为:2008-01-13,结束时间为:2008-01-19
星期:4,开始时间为:2008-01-20,结束时间为:2008-01-26
星期:5,开始时间为:2008-01-27,结束时间为:2008-02-02
星期:6,开始时间为:2008-02-03,结束时间为:2008-02-09
星期:7,开始时间为:2008-02-10,结束时间为:2008-02-16
星期:8,开始时间为:2008-02-17,结束时间为:2008-02-23
星期:9,开始时间为:2008-02-24,结束时间为:2008-03-01
星期:10,开始时间为:2008-03-02,结束时间为:2008-03-08
星期:11,开始时间为:2008-03-09,结束时间为:2008-03-15
星期:12,开始时间为:2008-03-16,结束时间为:2008-03-22
星期:13,开始时间为:2008-03-23,结束时间为:2008-03-29
星期:14,开始时间为:2008-03-30,结束时间为:2008-04-05
星期:15,开始时间为:2008-04-06,结束时间为:2008-04-12
星期:16,开始时间为:2008-04-13,结束时间为:2008-04-19
星期:17,开始时间为:2008-04-20,结束时间为:2008-04-26
星期:18,开始时间为:2008-04-27,结束时间为:2008-05-03
星期:19,开始时间为:2008-05-04,结束时间为:2008-05-10
星期:20,开始时间为:2008-05-11,结束时间为:2008-05-17
星期:21,开始时间为:2008-05-18,结束时间为:2008-05-24
星期:22,开始时间为:2008-05-25,结束时间为:2008-05-31
星期:23,开始时间为:2008-06-01,结束时间为:2008-06-07
星期:24,开始时间为:2008-06-08,结束时间为:2008-06-14
星期:25,开始时间为:2008-06-15,结束时间为:2008-06-21
星期:26,开始时间为:2008-06-22,结束时间为:2008-06-28
星期:27,开始时间为:2008-06-29,结束时间为:2008-07-05
星期:28,开始时间为:2008-07-06,结束时间为:2008-07-12
星期:29,开始时间为:2008-07-13,结束时间为:2008-07-19
星期:30,开始时间为:2008-07-20,结束时间为:2008-07-26
星期:31,开始时间为:2008-07-27,结束时间为:2008-08-02
星期:32,开始时间为:2008-08-03,结束时间为:2008-08-09
星期:33,开始时间为:2008-08-10,结束时间为:2008-08-16
星期:34,开始时间为:2008-08-17,结束时间为:2008-08-23
星期:35,开始时间为:2008-08-24,结束时间为:2008-08-30
星期:36,开始时间为:2008-08-31,结束时间为:2008-09-06
星期:37,开始时间为:2008-09-07,结束时间为:2008-09-13
星期:38,开始时间为:2008-09-14,结束时间为:2008-09-20
星期:39,开始时间为:2008-09-21,结束时间为:2008-09-27
星期:40,开始时间为:2008-09-28,结束时间为:2008-10-04
星期:41,开始时间为:2008-10-05,结束时间为:2008-10-11
星期:42,开始时间为:2008-10-12,结束时间为:2008-10-18
星期:43,开始时间为:2008-10-19,结束时间为:2008-10-25
星期:44,开始时间为:2008-10-26,结束时间为:2008-11-01
星期:45,开始时间为:2008-11-02,结束时间为:2008-11-08
星期:46,开始时间为:2008-11-09,结束时间为:2008-11-15
星期:47,开始时间为:2008-11-16,结束时间为:2008-11-22
星期:48,开始时间为:2008-11-23,结束时间为:2008-11-29
星期:49,开始时间为:2008-11-30,结束时间为:2008-12-06
星期:50,开始时间为:2008-12-07,结束时间为:2008-12-13
星期:51,开始时间为:2008-12-14,结束时间为:2008-12-20
星期:52,开始时间为:2008-12-21,结束时间为:2008-12-27

   发表时间:2010-05-04   最后修改:2010-05-04
为什么不传DATE进SQL中去
你的用法不太容易用的上索引
如果你在sql中把字串变DATA
两天之的又会丢23个小时。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics