package iprai.rid.test1;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class WeeksInYear {
/**
* 返回指定年度的所有周。List中包含的是String[2]对象<br>
* string[0]本周的开始日期,string[1]是本周的结束日期。<br>
* 日期的格式为yyyy-MM-dd。<br>
* 每年的第一个周,必须包含星期一且是完整的七天。<br>
* 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 <br>
* 星期一在哪一年,那么包含这个星期的周就是哪一年的周。<br>
* 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。<br>
*
* @param year 格式 yyyy ,必须大于1900年度 小于9999年
* @return
*/
public static List<String[]> getWeeksByYear(final int year){
if(year<1900 || year >9999){
throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
}
//实现思路,首先计算当年有多少个周,然后找到每个周的开始日期和结束日期
// Calendar calendar = new GregorianCalendar();
// // 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
// calendar.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
// calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //每周从周一开始
// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
// calendar.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
// calendar.set(Calendar.YEAR, year); // 设置年度为指定的年
// //首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周
int weeks = getWeekNumByYear(year);
// System.out.println(year+"共有"+weeks+"个周");
List<String[]> result = new ArrayList<String[]>(weeks);
for(int i=1;i<=weeks;i++){
String[] tempWeek = new String[2];
tempWeek[0] = getYearWeekFirstDay(year,i);
tempWeek[1] = getYearWeekEndDay (year,i);
//或者使用下面的代码,不过发现效率更低
// tempWeek[0] = getDateAdd(firstWeekDay,(i-1)*7+0);
// tempWeek[1] = getDateAdd(firstWeekDay,(i-1)*7+6);
result.add(tempWeek);
// System.out.println(i+"="+tempWeek[0]+"_"+tempWeek[1]);
}
return result;
}
/**
* 计算指定年度共有多少个周。
* @param year 格式 yyyy ,必须大于1900年度 小于9999年
* @return
*/
public static int getWeekNumByYear(final int year){
if(year<1900 || year >9999){
throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
}
int result = 52;//每年至少有52个周 ,最多有53个周。
String date = getYearWeekFirstDay(year,53);
if(date.substring(0, 4).equals(year+"")){ //判断年度是否相符,如果相符说明有53个周。
result = 53;
}
return result;
}
/**
* 计算某年某周的开始日期
* @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年
* @param weekNum 1到52或者53
* @return 日期,格式为yyyy-MM-dd
*/
public static String getYearWeekFirstDay(int yearNum,int weekNum) {
if(yearNum<1900 || yearNum >9999){
throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
}
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//每周从周一开始
// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
cal.set(Calendar.YEAR, yearNum);
cal.set(Calendar.WEEK_OF_YEAR, weekNum);
//分别取得当前日期的年、月、日
return getFormatDate(cal.getTime());
}
/**
* 计算某年某周的结束日期
* @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年
* @param weekNum 1到52或者53
* @return 日期,格式为yyyy-MM-dd
*/
public static String getYearWeekEndDay(int yearNum,int weekNum) {
if(yearNum<1900 || yearNum >9999){
throw new NullPointerException("年度必须大于等于1900年小于等于9999年");
}
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//每周从周一开始
// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。
cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天
cal.set(Calendar.YEAR, yearNum);
cal.set(Calendar.WEEK_OF_YEAR, weekNum);
return getFormatDate(cal.getTime());
}
public static String getFormatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sDate = sdf.format(date);
return sDate;
}
}
分享到:
相关推荐
Date.prototype.isLeapYear 判断闰年 ...Date.prototype.WeekNumOfYear 判断日期所在年的第几周 StringToDate 字符串转日期型 IsValidDate 验证日期有效性 CheckDateTime 完整日期时间检查 daysBetween 日期天数差
自制C++中应用的日期操作类 操作天数的增减 操作月数的增减 操作年数的增减 获取日期所在月有几周 获取日期所在的周一 获取日期所在的周日 获取日期所在月的第几周周一 获取日期所在月的第几周周日 获取日期星期...
很全的日期操作:日期加减、得到N年、N月、N周、N天、N小时、N分钟后的日期、转换时间戳为日期格式、校验日期是否合法、得到特定时间的几分钟之后的时间
java时间操作工具类,已封装好,包含获取某一时间的年,月,日,星期。以及对某一时间进行年,月,日,周的加减。还有获取某一时间年,月,日,周的起始和结束时间等等
点左右箭头,那个地方显示上一周或下一周的今天,且下面的表格显示上一周或下一周的每个日期 JS本身没有提供日期加减操作能力,所以借此写了几个方法,用以操作日期,主要是实现日期的加减 作者:郴州拓职任文敏 js...
Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。具体扩展的方法如下: parseCHS--静态方法。解析常用的中文日期并返回日期对象。 add--日期加减操作。[注:此函数在上传时还存在...
支持多种调用模式,下拉,输入,导航选择日期,支持周显示,起始日期功能 ,自定义格式,限制日期的范围,选择今天以前的日期(包括今天),选择今天以后的日期(不包括今天),选择本月的日期1号至本月最后一天,选择今天7:00:...
在对日期型数据进行操作时,经常会遇到要获取当前日期,获取当前时间,获取日期的年月日等等操作,下 面我们就来介绍下日期的常用处理函数。
主要介绍了C#获取每个年,月,周的起始日期和结束日期的方法,涉及C#时间与日期基本操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
效果图: 代码如下: <!DOCTYPE ...<... ...日历操作</title> [removed] [removed] = function(){ var cells = document.getElementById('monitor').getElementsByTagNa
主要介绍了PHP计算指定日期所在周的开始和结束日期的方法,涉及php操作日期时间的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
java中如何获得某天所在周或月的日期,如某一天所在周周一至周日的信息,所在月的天数等
某天所在的星期内每天的日期!java日期基本操作!!适合初学者学习。
大部分日期控件都具备功能如:带时间显示,支持周显示,自定义格式,自动纠错,智能纠错,起始日期,操作按钮自定义,快速选择日期,支持多种调用模式。支持静态限制,动态限制,脚本自定义限制,以及无效天和无效日期功能,利用...
主要介绍了PHP获取日期对应星期、一周日期、星期开始与结束日期的方法,涉及php日期与时间相关计算操作技巧,需要的朋友可以参考下
主要介绍了php获取本周开始日期和结束日期的方法,实例分析了php操作日期的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
UiPath中关于日期的操作
vb.net 2008 数据库日期运算 有大于,小于,等于,昨天,今天,昨天,前天,本周,最近8小时,时间段等运算,统计输出条形图,饼图,有操作方法
主要介绍了PHP判断两个给定日期是否在同一周的方法,涉及PHP针对日期时间的转换、运算及判断等相关操作技巧,需要的朋友可以参考下