java 如何取得下周一和下周日的日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何取得下周一和下周日的日期相关的知识,希望对你有一定的参考价值。
import java.text.*;import java.util.*;
public class PrintThisMonday
public static void main(String[] argv)throws Exception
for(int i=1; i<11; i++)
String strDate = String.format("2012-12-0%d", i);
Date date = str2Date(strDate);
Date dateSunDay = getSunday(date);
Date dateMonday = getMonday(date);
System.out.println(String.format("日期 %tY-%<tm-%<td %<ta 周日是:%tY-%<tm-%<td %<ta 周一是:%tY-%<tm-%<td %<ta", date, dateSunDay, dateMonday) );
//注:周日是一周的开始
public static Date getMonday(Date date)throws Exception
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK);
if(week>2)
cal.add(Calendar.DAY_OF_MONTH,-(week-2)+7);
else
cal.add(Calendar.DAY_OF_MONTH,2-week+7);
return cal.getTime();
//注:周日是一周的开始
public static Date getSunday(Date date)throws Exception
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK);
if(week>1)
cal.add(Calendar.DAY_OF_MONTH,-(week-1)+7);
else
cal.add(Calendar.DAY_OF_MONTH,1-week+7);
return cal.getTime();
static SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
static Date str2Date(String s)
try
return fmt.parse(s);
catch(Exception ex)
ex.printStackTrace();
return null;
日期 2012-12-01 星期六 周日是:2012-12-02 星期日 周一是:2012-12-03 星期一
日期 2012-12-02 星期日 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-03 星期一 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-04 星期二 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-05 星期三 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-06 星期四 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-07 星期五 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-08 星期六 周日是:2012-12-09 星期日 周一是:2012-12-10 星期一
日期 2012-12-09 星期日 周日是:2012-12-16 星期日 周一是:2012-12-17 星期一
日期 2012-12-10 星期一 周日是:2012-12-16 星期日 周一是:2012-12-17 星期一 参考技术A public static List<Date> dateToWeek(Date mdate)
int b=mdate.getDay();
Date fdate ;
List <Date> list = new ArrayList();
Long fTime=mdate.getTime()-b*24*3600000;
for(int a=0;a<8;a++)
fdate= new Date();
fdate.setTime(fTime+(a*24*3600000));
list.add(a, fdate);
return list;
调用这个方法 你传入当前日期 就能获得 下一周内的所有天数的一个List,然后再list里取周一和周日就OK了追问
穿进去2012-12-07
看看结果
2012/12/02
2012/12/03
2012/12/04
2012/12/05
2012/12/06
2012/12/07
2012/12/08
2012/12/09
全是这周的日期 还带个上周周日
public static void main(String[] args)
SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
try
Date date=getSunday(new Date());
catch (Exception e)
e.printStackTrace();
List dateList=getAfterDateList();
for(int i=0;i<dateList.size();i++)
Date dd=(Date)dateList.get(i);
System.out.println(fmt.format(dd));
public static List getAfterDateList()
List dateList=new ArrayList();
Calendar calendar=Calendar.getInstance();
Date date;
try
date = getSunday(calendar.getTime());
calendar.setTime(date);
for(int i=1;i<=7;i++)
calendar.add(Calendar.DATE, 1);
dateList.add(calendar.getTime());
catch (Exception e)
e.printStackTrace();
return dateList;
public static Date getSunday(Date date)throws Exception
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK);
if(week>1)
cal.add(Calendar.DAY_OF_MONTH,-(week-1)+7);
else
cal.add(Calendar.DAY_OF_MONTH,1-week+7);
return cal.getTime();
参考技术C public static void main(String[] args)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = "2012-01-30";
Calendar cal = Calendar.getInstance();
try
Date da = sdf.parse(dateStr);
cal.add(Calendar.DATE, 7);
Date date = cal.getTime();
String dates = sdf.format(date);
System.out.println(dates);
catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();
经测试通过,至于取得任意日期的下周时间正在测试~_~
JAVA 日期工具类:日期获取周,获取指定周周一周日,某月月初月末日期,日期时间戳字符串转换,日期加减等
JAVA 日期工具类
- 获取某天00:00:00点的时间戳
- 日期获取周
- 日期获取星期几
- 获取时间戳属于当月的哪天
- 获取指定周周一周日
- 获取某月月初月末日期
- 根据星期几获取日期
- 获取年月日,时分秒
- 根据day获取所在周,周一周日
- 根据day获取所在月,月初月末日期
- 根据day获取上月月末的时间戳
- 日期时间戳字符串转换
- 日期加减等
源码
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</gr.oupId>
<artifactId>lombok</artifactId>.1
<version>1.18.8</version>
</dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateFormatUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/*************************************
*Class Name: TimeUtils
*Description: <时间工具类>
*@author: Seminar
*@create: 2022/9/15
*@since 1.0.0
*************************************/
@Slf4j
public class TimeUtils
public static final long ONEDAYMILLIS = 24 * 60 * 60 * 1000;
public static final String Y_M_D = "yyyy-MM-dd";
public static final String YMD = "yyyyMMdd";
public static final String YMDHMS = "yyyy-MM-dd HH:mm:ss.SSS";
/**
* 获取当天的00:00:00的时间戳
*
* @return
*/
public static long getBeginMillisOfDay()
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTimeInMillis();
/**
* 获取某天的00:00:00的时间戳
*
* @param millis 毫秒时间戳
* @return
*/
public static long getBeginMillisOfDay(long millis)
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(millis));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTimeInMillis();
/**
* 获取时间戳戳是星期几
*
* @param date
* @return 当前日期是星期几
*/
public String getWeekOfDate(Date date)
String[] weekDays = "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六";
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
// log.info(" ", cal.get(Calendar.DAY_OF_WEEK), w, weekDays[w]);
return weekDays[w];
/**
* 获取时间戳是星期几
*
* @param
* @return
*/
public static int getIntWeekOfDate(long millis)
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(millis));
return cal.get(Calendar.DAY_OF_WEEK);
/**
* 获取时间戳属于当月的哪天
*
* @param millis
* @return
*/
public static Integer getDayOfMonth(long millis)
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(millis));
int w = cal.get(Calendar.DAY_OF_MONTH);
return w;
/**
* 获取年月日
*
* @param epochSecond
* @return
*/
public static String getYmd(Long epochSecond)
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(new Date(epochSecond));
/**
* 获取年月
*
* @param millis
* @return
*/
public static String getYm(Long millis)
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
return sdf.format(new Date(millis));
/**
* 获取上月月末的时间戳
*
* @param epochSecond
* @return
*/
public static long getLastMonthMills(Long epochSecond)
SimpleDateFormat sdf = new SimpleDateFormat(Y_M_D);
Calendar cale = Calendar.getInstance();
if (epochSecond != null && epochSecond != 0L)
Date date = new Date();
date.setTime(epochSecond);
cale.setTime(date);
int firstDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最小天数
cale.set(Calendar.DAY_OF_MONTH, firstDay);//设置日历中月份的最小天数
return cale.getTimeInMillis() - ONEDAYMILLIS;
/**
* 获取某个月的月初日期
*
* @param epochSecond
* @return
*/
public static String getMonthFirstDay(Long epochSecond)
SimpleDateFormat sdf = new SimpleDateFormat(Y_M_D);
Calendar cale = Calendar.getInstance();
if (epochSecond != null && epochSecond != 0L)
Date date = new Date();
date.setTime(epochSecond);
cale.setTime(date);
int firstDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最小天数
cale.set(Calendar.DAY_OF_MONTH, firstDay);//设置日历中月份的最小天数
return sdf.format(cale.getTime());
/**
* 获取某个月的月末日期
*
* @param epochSecond
* @return
*/
public static String getMonthLastDay(Long epochSecond)
SimpleDateFormat sdf = new SimpleDateFormat(Y_M_D);
Calendar cale = Calendar.getInstance();
if (epochSecond != null && epochSecond != 0L)
Date date = new Date();
date.setTime(epochSecond);
cale.setTime(date);
int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
return sdf.format(cale.getTime());
/**
* 获取day所在月,月初日期
*
* @param day
* @return
*/
public static String getMonthFirstDay(String day, String pattern) throws ParseException
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Calendar cale = Calendar.getInstance();
Date date = sdf.parse(day);
cale.setTime(date);
int firstDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最小天数
cale.set(Calendar.DAY_OF_MONTH, firstDay);//设置日历中月份的最小天数
return sdf.format(cale.getTime());
/**
* 获取day所在月,月末日期
*
* @param day
* @return
*/
public static String getMonthLastDay(String day, String pattern) throws ParseException
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Calendar cale = Calendar.getInstance();
Date date = sdf.parse(day);
cale.setTime(date);
int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
return sdf.format(cale.getTime());
/**
* 根据星期获取日期
*
* @param week 星期几 1代码星期日,2代表星期一。。。7代表星期六
* @return
*/
public static Date getDateByWeek(int week)
int targetWeek = week;
Calendar c = Calendar.getInstance();
// 当前日期星期数
int currWeek = c.get(Calendar.DAY_OF_WEEK);
do
if (currWeek == targetWeek)
// 如果所给星期数和当前日期星期数相等则向后推7天
c.add(Calendar.DAY_OF_MONTH, 7);
else if (currWeek < week)
currWeek--;
while (currWeek != targetWeek);
return c.getTime();
/**
* 根据年月获取月末最后一天日期
*
* @param year
* @param month
* @return
*/
public static String getLastDay(int year, int month, String format)
Calendar cale = Calendar.getInstance();
cale.set(Calendar.YEAR, year);//赋值年份
cale.set(Calendar.MONTH, month - 1);//赋值月份
int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat(format); //格式化日期yyyy-MM-dd
String lastDayOfMonth = sdf.format(cale.getTime());
return lastDayOfMonth;
/**
* 获取某月的第一天
*
* @param timeSecs 时间戳13位ms
* @param format 格式化字符串
* @return
*/
public static String getFirstDay(Long timeSecs, String format)
Calendar cale = Calendar.getInstance();
if (timeSecs != null && timeSecs != 0L)
Date date = new Date();
date.setTime(timeSecs);
cale.setTime(date);
int lastDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat(format);//格式化日期yyyy-MM-dd
String lastDayOfMonth = sdf.format(cale.getTime());
return lastDayOfMonth;
/**
* 根据年月获取月初第一天日期
*
* @param year 年
* @param month 月
* @param format 格式化日期
* @return
*/
public static String getFirstDay(int year, int month, String format)
Calendar cale = Calendar.getInstance();
cale.set(Calendar.YEAR, year); //赋值年份
cale.set(Calendar.MONTH, month - 1);//赋值月份
int lastDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat(format);//格式化日期yyyy-MM-dd
String lastDayOfMonth = sdf.format(cale.getTime());
return lastDayOfMonth;
/**
* 获取某月的最后一天
*
* @param timeSecs 时间戳12位毫秒
* @param format 格式化日期
* @return
*/
public static String getLastDay(Long timeSecs, String format)
Calendar cale = Calendar.getInstance();
if (timeSecs != null && timeSecs != 0L)
Date date = new Date();
date.setTime(timeSecs);
cale.setTime(date);
int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
SimpleDateFormat sdf = new SimpleDateFormat(format);//格式化日期yyyy-MM-dd
String lastDayOfMonth = sdf.format(cale.getTime());
return lastDayOfMonth;
/**
* 根据日期获取周
*
* @param date
* @return 45
*/
public static int getWeek(Date date)
GregorianCalendar g = new GregorianCalendar();
g.setTime(date);
return g.get(Calendar.WEEK_OF_YEAR); //获得周数
/**
* 根据日期获取年+周
*
* @param day 20221103
* @return 202245
*/
public static String getWeek(String day) throws ParseException
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YMD);
Date date = simpleDateFormat.parse(day);
GregorianCalendar g = new GregorianCalendar();
g.setTime(date);
// g.get(Calendar.WEEK_OF_YEAR); //获得周数
return day.substring(0, 4) + g.get(Calendar.WEEK_OF_YEAR);
/**
* 日期格式化
*/
public static String format(Calendar c, String pattern)
Calendar calendar 以上是关于java 如何取得下周一和下周日的日期的主要内容,如果未能解决你的问题,请参考以下文章
mysql中如何查询一周(周一至周日)和一个月(自然月)销售数据(字段-sale)的总和,时间字段是date