java怎么统计出当年有多少个周,并列出那些

java怎么统计出当年有多少个周,并列出那些,第1张

计算一年有多少个周的思路:首先,每年至少有52个周,至多有53个周,取决于周一是在哪年(也可以定位周日,这个是由需求决定的),以下是详细代码,其中判断哪一天决定了当周是属于哪一年的逻辑是写在getYearWeekEndDay中。

/

返回指定年度的所有周。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。

// calendarsetFirstDayOfWeek(CalendarMONDAY); //设置每周的第一天为星期一

// calendarset(CalendarDAY_OF_WEEK, CalendarMONDAY); //每周从周一开始

// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。

// calendarsetMinimalDaysInFirstWeek(7); //设置每周最少为7天

// calendarset(CalendarYEAR, year); // 设置年度为指定的年

// //首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周

int weeks = getWeekNumByYear(year);

// Systemoutprintln(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);

resultadd(tempWeek);

// Systemoutprintln(i+"="+tempWeek[0]+"_"+tempWeek[1]);

}

第二周的周一??不完整周也算第一周???

我理解你的问题是第二个周一的日期是多少??

import javautilCalendar;

public class Test {

/

@param args

/

public static void main(String[] args) throws Exception {

Calendar c_begin = CalendargetInstance();

Calendar c_end = CalendargetInstance();

c_beginset(2010, 3, 1); //Calendar的月从0-11,所以4月是3

c_endset(2010, 4, 20); //Calendar的月从0-11,所以5月是4

int count = 0;

while(c_beginbefore(c_end)){

//Systemoutprintln(new javasqlDate(c_begingetTime()getTime()));

if(c_beginget(CalendarDAY_OF_WEEK)==CalendarMONDAY){

count++;

}

if(count == 2){

Systemoutprintln(c_beginget(CalendarYEAR)+"年"+(c_beginget(CalendarMONTH)+1)+"月"+c_beginget(CalendarDATE)+"日");

break;

}

c_beginadd(CalendarDAY_OF_YEAR, 1);

}

}

}

这是我原来用C写的,供你参考:

/ 判断某日期是该年的第几周 /

int getWeekSeqByDate(int year, int month, int day)

{

int diff;

int startWeek;

int week;

diff = dateDiff(year,1,1,year,month,day);

startWeek = getWeekByDate(year, 1, 1);

diff += startWeek + 1;

week = diff / 7;

if(diff % 7 != 0)

week++;

return week;

}

/ 返回两个日期相隔的天数 /

int dateDiff(int y1, int m1, int d1, int y2, int m2, int d2)

{

int i;

int days[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int diff0 = 0, diff1 = 0, diff2 = 0;

/ 计算d1日期到d1所在年份第一天相隔的天数 /

days[1] = isLeapYear(y1)==1 29 : 28;

for(i=1; i<m1; i++)

diff1 += days[i-1];

/ 计算d2日期到d2所在年份第一天相隔的天数 /

days[1] = isLeapYear(y2)==1 29 : 28;

for(i=1; i<m2; i++)

diff2 += days[i-1];

/ 计算d1、d2两个日期的年份相隔的天数 /

if(y1 < y2){

for(i=y1; i<y2; i++){

diff0 += isLeapYear(i)==1 366 : 365;

}

}

else if(y1 > y2){

for(i=y2; i<y1; i++){

diff0 += isLeapYear(i)==1 366 : 365;

}

diff0 = -1;

}

return diff0 + diff2 - diff1 + d2 - d1;

}

/ 判断year是否是闰年,若是返回1,否则返回0 /

int isLeapYear(int year)

{

return ((year%400==0) || (year%4==0 && year%100!=0));

}

/ 返回某月的天数 /

int getDaysOfMonth(int year, int month)

{

if(month<1 || month>12)

return -1;

if(month==1 || month==3 || month==5 || month==7 || month==8

|| month==10 || month==12)

return 31;

else if(month==4 || month==6 || month==9 || month==11)

return 30;

else

if(isLeapYear(year) == 1)

return 29;

else

return 28;

}

以上就是关于java怎么统计出当年有多少个周,并列出那些全部的内容,包括:java怎么统计出当年有多少个周,并列出那些、Java如何得到指定时间段中的第几周第几天的日期、Java中如何根据日期确定它是属于该年的第几周如2011-1-2属于2011年的第2周。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9699722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存