`
haiyangyiba
  • 浏览: 14035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

 题外话:如果某一年的第一天,也就是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

分享到:
评论
3 楼 抛出异常的爱 2013-05-29  
Oracle

引用

W 返回指定日期在当月中的第X周(范围:1-5)
select to_char(to_date(¨2007-6-18¨,¨yyyy-mm-dd¨),¨w¨) from dual;
3

WW 返回指定日期在当年中的第X周(范围:1-53)
select to_char(to_date(¨2007-6-18¨,¨yyyy-mm-dd¨),¨ww¨) from dual;
25


IW 指定日期在当年中第X周(范围:1-52或1-53(润年))
select to_char(sysdate,¨IW¨) from dual;
50
2 楼 haiyangyiba 2013-05-22  
public static void main(String[] args) {

		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DAY_OF_WEEK, 2);//将当前日期设置为本周的第二天,周日为第一天,周一为第二天
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("=========" + dateFormat.format(calendar.getTime()));
	}

获取当前日期所在的周的,每个周一的日期
获取每个周的周日的日期,将2修改为1即可
1 楼 抛出异常的爱 2010-05-04  
为什么不传DATE进SQL中去
你的用法不太容易用的上索引
如果你在sql中把字串变DATA
两天之的又会丢23个小时。

相关推荐

    C++输出某年的日历

    1 求某个日期对应的星期 2 输出某年的日历 0 结束程序 ------------------------------------------ 1 请输入年,月, 日:2010 10 1 2010年10月1日这天是周五 ------------------------------------------

    DateFormatUtils时间获取及格式化工具类

    查询距离当前系统时间的本周星期一、星期日的天数的日期 获取系统当前 n天后 开始时间 获取系统当前 n天后 结束时间 按照指定格式,格式化指定时间 获取当前日期 获取给定日期N天后的日期 获取某月开始时间 获取本月...

    java最全时间工具类,针对年月日周的操作

    java时间操作工具类,已封装好,包含获取某一时间的年,月,日,星期。以及对某一时间进行年,月,日,周的加减。还有获取某一时间年,月,日,周的起始和结束时间等等

    javascript文档

    atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big 方法 在String 对象的文本两端加入 HTML 的标识。 按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的...

    JScript 语言参考

    atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big 方法 在String 对象的文本两端加入 HTML 的标识。 按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的...

    微软JavaScript手册

    atEnd 方法 返回一个指示枚举算子是否处于集合结束处的 Boolean 值。 big 方法 在String 对象的文本两端加入 HTML 的标识。 按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    3.5.13 YEARFRAC——计算从开始日期到结束日期所经历的天数占全年天数的百分比 149 第4章 逻辑函数 151 4.1 逻辑值函数 151 4.1.1 TRUE——返回逻辑值TRUE 151 4.1.2 FALSE——返回逻辑值FALSE 152 4.2 条件...

    排班系统C语言课程设计..doc

    C程序 课程设计报告 201— 201 学年第 学期 课程名称 C语言课程设计 设计题目 《排班系统》 学生...在单个对象输出结束之后,我们选择了 -1这个不会与其他日期混淆的数字,以此表示可以对下一个对象进行输出。这就需要

    javascript入门笔记

    来表示结束 所有的标点符号都是英文的 ; 和 ; . 和 。 : 和 : " 和 “ ' 和 ‘ () 和 () [] 和 【】 {} 和 {} 2、注释 单行注释: // 多行注释: /* */ 3、变量 与 常量 1、变量 1、什么是变量 ...

    C#编程经验技巧宝典

    的值 52 &lt;br&gt;0069 求最大公约数 52 &lt;br&gt;0070 求最小公倍数 53 &lt;br&gt;0071 判断素数的算法 53 &lt;br&gt;0072 如何判断一个数是否是完数 54 &lt;br&gt;0073 歌德巴赫猜想的算法 54 &lt;br&gt;0074 八皇后...

    易语言家庭影音播放器源码

    程序集变量 日期, 文本型 .程序集变量 时间, 文本型 .程序集变量 客户数, 整数型 .程序集变量 点播播放状态, 逻辑型, , , 点播变量 .程序集变量 目录信息, 文本型, , , 点播变量 .程序集变量 目录名, 文本型, , , ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...

    2009达内SQL学习笔记

    select:从一个或多个表中检索一个或多个数据列。包含信息:想选择什么表,从什么地方选择。必须要有From子句。(最常用) 当从多张表里查询的时候,会产生笛卡尔积;可用条件过滤它。 当两个表有相同字段时必须加...

    ios开发记录

    //UIView 静态方法,开始一个动画 [UIView beginAnimations:nil context:nil]; begin 开始 //animation 动画 duration 间隔时间 [UIView setAnimationDuration:1]; //从当前状态设置动画开始 [UIView ...

    freemarker总结

    ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x&gt; ${x_index + 1}.${x}, 星期四"&gt;&lt;#break&gt;&lt;/#if&gt; &lt;p&gt;We have these animals: &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price &lt;tr&gt;&lt;td&gt;${...

    苹果8XPC和手机二合一完整版

    ****************************模板规范化管理 开始**************************** 每个模版要把所用的css,js,img,html按照相关规定,放到指定目录。 每个模版都可定义不同的样式,所以系统内置的功能的相关文件也...

    基于SpringBoot+vue实现的实验室管理系统源码+项目说明.zip

    工作内容信息包括周次、时间(年/月/日)、星期、人员编号、工作内 容、系统时间。实验技术员可以按日期查询实验室助理的工作内容。实验室助理可 以在线填写实验教学仪器设备维修申请,申请信息包括设备名称、设备...

    Oracle9i的init.ora参数中文说明

    说明: 为以下各项指定命名约定, 包括日期和星期的编号, 默认日期格式, 默认小数点字符和组分隔符, 以及默认的 ISO 和本地货币符号。可支持的区域包括美国, 法国和日本。有关所有区域的信息, 请参阅 Oracle8i ...

    文章管理系统

    1.[*修复]修复后台某文件出现任意下载漏洞【感谢乌云[haitaowuyun]发现】 2.[*修复]修复前台存在的SQL注入风险漏洞【感谢乌云[语邑尘]发现】 3.[*修复]修复前台存在的xss跨站脚本攻击漏洞【感谢乌云[evil]发现】 4....

    点阵电子钟制作-电路方案

    时钟的发生我采用了目前较流行的DS1302实时时钟芯片,而没有用单片机直接产生,因为单片机产生日期星期计算是比较复杂而且不精准的。而DS1302具有涡流电池备电,2100年以前的日期、时间计算、SPI总线通信。并在内部...

Global site tag (gtag.js) - Google Analytics