获取本周一
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 < 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中怎么样取得一周内的所有日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)