java 如何获取 上周一日期,上周末日期,本周一日期。

java 如何获取 上周一日期,上周末日期,本周一日期。,第1张

获取本周一

 public static Date getNowWeekMonday(Date date) {    

            Calendar cal = CalendargetInstance();    

             calsetTime(date);    

                  

             caladd(CalendarDAY_OF_MONTH, -1); //解决周日会出现 并到下一周的情况    

            calset(CalendarDAY_OF_WEEK, CalendarMONDAY);    

                 

303            return calgetTime();    

        }

获取上周一

public static Date getLastWeekMonday(Date date) {    

             Date a = DateUtilsaddDays(date, -1);    

            Calendar cal = CalendargetInstance();    

            calsetTime(a);    

            caladd(CalendarWEEK_OF_YEAR, -1);// 一周    

            calset(CalendarDAY_OF_WEEK, CalendarMONDAY);    

                  

             return calgetTime();    

        }

获取上周日

public static Date  getLastWeekSunday(Date date) {    

                 

            Date a = DateUtilsaddDays(date, -1);    

           Calendar cal = CalendargetInstance();    

         calsetTime(a);    

           calset(CalendarDAY_OF_WEEK, 1);    

                 

          return calgetTime();    

        }

代码里面有用到 lapachecommon-ang包 你需要下载下 就可以使用

import javatextDateFormatSymbols;

import javautilCalendar;

import javautilGregorianCalendar;

public class Test {

/

@param args

/

public static void main(String[] args){

Calendar c_begin = new GregorianCalendar();

Calendar c_end = new GregorianCalendar();

DateFormatSymbols dfs = new DateFormatSymbols();

String[] weeks = dfsgetWeekdays();

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

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

int count = 1;

c_endadd(CalendarDAY_OF_YEAR, 1); //结束日期下滚一天是为了包含最后一天

while(c_beginbefore(c_end)){

Systemoutprintln("第"+count+"周 日期:"+new javasqlDate(c_begingetTime()getTime())+", "+weeks[c_beginget(CalendarDAY_OF_WEEK)]);

if(c_beginget(CalendarDAY_OF_WEEK)==CalendarSUNDAY){

count++;

}

c_beginadd(CalendarDAY_OF_YEAR, 1);

}

}

}

public static List<Date> dateToWeek(Date mdate){

int b=mdategetDay();

Date fdate ;

List <Date> list = new ArrayList();

Long fTime=mdategetTime()-b243600000;

for(int a=0;a<8;a++){

fdate= new Date();

fdatesetTime(fTime+(a243600000));

listadd(a, fdate);

}

return list;

}

调用这个方法 你传入一个日期 就能获得 这个日期所在一周内的所有天数的一个List

你说需要计算一个月有多少周,若是指,一月,二月一直到十二月每个月有多少周的话,可以用Java8的新时间API进行计算,因为里面已经封装了每个月了,但由于每一年每个月的周数可能不同,所以必须还需要一个日期,也就是年,因此得到某年某月的某个时间,就可以相应算出这个时间所在月的第一天和最后一天,然后计算这第一天和最后一天相隔多少个周

思路:

获取所有月份的枚举集合A

随意获取一个时间B

循环所有的月份A,把B的月份依次修改为A中的每个月份,得到修改后的时间集合C

循环C中的所有时间,把每个时间都算出该时间的所在月份的第一天和最后一天,并计算周数

打印周数

代码:

// 随意取一个时间,取了当前时间

LocalDate localDate = LocalDatenow();

Systemoutprintln("当前时间为:" + localDate);

// 根据封装好的月份获取一个一月到十二月的Month流,此时流里的对象为Month

Arraysstream(Monthvalues())

      // 把每个month都调整到当前这个时间里,此时流的对象为LocalDate

      map(month -> monthadjustInto(localDate))

      // 这里方便里观察此时流的数据,把转换后的时间打印了出来

      peek(Systemout::println)

      // 根据时间的所在月的第一天和最后一天作为间隔计算周数

      map(temporal -> ChronoUnitWEEKSbetween(temporalwith(TemporalAdjustersfirstDayOfMonth()), temporalwith(TemporalAdjusterslastDayOfMonth())))

      // 打印最后的周数

      forEach(Systemout::println);

import javatextSimpleDateFormat;

import javautilDate;

import javautilCalendar;

public class WorkDay {

public static void main(String[] args) {

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

for (Date date : getWeekDay()) {

Systemoutprintln(dateFormatformat(date));

}

}

public static Date[] getWeekDay() {

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

Date[] dates = new Date[5];

for (int i = 0; i &lt; 5; i++) {

dates[i] = calendargetTime();

calendaradd(CalendarDATE, 1);

}

return dates;

}

}

如果每周指的是从星期一开始,那么这个程序可以达到你的要求。

如果每周指得是从星期日开始,那么请说明,我再修改。

你第一问需要思考一下,你第二问日历类直接get即可!

第一问:

年末与年初进行周与周重叠的时候,获取的是第二年的第一周数字,这个时候其实很简单,因为月份是绝对不相同的对不

直接判断月份即可,头年月份肯定不会第二年月份想等,在同时判断一下,周是否为1,条件同时达到,就叠加52即可!

截个图,你参照日历看一下,分毫不差:

计算一年有多少个周的思路:首先,每年至少有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]);

}

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(datesubstring(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 = CalendargetInstance();

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

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

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

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

calset(CalendarYEAR, yearNum);

calset(CalendarWEEK_OF_YEAR, weekNum);

//分别取得当前日期的年、月、日

return getFormatDate(calgetTime());

}

/

计算某年某周的结束日期

@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 = CalendargetInstance();

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

calset(CalendarDAY_OF_WEEK, CalendarSUNDAY);//每周从周一开始

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

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

calset(CalendarYEAR, yearNum);

calset(CalendarWEEK_OF_YEAR, weekNum);

return getFormatDate(calgetTime());

}

mport javatextSimpleDateFormat;

import javautilCalendar;

public class Test{

public static void main(String args[]){

Calendar cal = CalendargetInstance();

//n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推

int n = 2;

String monday;

caladd(CalendarDATE, n7);

//想周几,这里就传几CalendarMONDAY(TUESDAY)

calset(CalendarDAY_OF_WEEK,CalendarMONDAY);

monday = new SimpleDateFormat("yyyy-MM-dd")format(calgetTime());

Systemoutprintln(monday);

}

}

以上就是关于java 如何获取 上周一日期,上周末日期,本周一日期。全部的内容,包括:java 如何获取 上周一日期,上周末日期,本周一日期。、Java如何得到指定时间段中的所有周,及每周的每一天都是周几和日期是多少、在java中怎么样取得一周内的所有日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存