java周数与相应时间转换实体类
前言
最近开发遇到查询第几周内数据的问题,从而计算环比、同比,这就需要知道周数对应的日期,上网搜索并总结出一个实体类,方便以后开发。
具体代码
import java.text.SimpleDateFormat;
import java.time.YearMonth;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtil {
/** * 取得当前日期是多少周 * * @param date * @return */
public int getWeekOfYear(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime (date);
return c.get(Calendar.WEEK_OF_YEAR);
}
/** * 得到某一年周的总数 * * @param year * @return */
public int getMaxWeekNumOfYear(int year) {
Calendar c = new GregorianCalendar();
c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
return getWeekOfYear(c.getTime());
}
/** * 得到某年某周的第一天 * * @param year(yyyy) * @param week * @return */
public String getFirstDayOfWeek(String year, String week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, Integer.valueOf(year));
c.set (Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, (Integer.valueOf(week)-1) * 7);
return getFirstDayOfWeek(cal.getTime());
}
/** * 得到某年某周的最后一天 * * @param year(yyyy) * @param week * @return */
public String getLastDayOfWeek(String year, String week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, Integer.valueOf(year));
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE , (Integer.valueOf(week)-1) * 7);
return getLastDayOfWeek(cal.getTime());
}
/** * 得到某年前一年某周的第一天 * * @param year(yyyy) * @param week * @return */
public String getLastYearFirstDayOfWeek(String year, String week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, Integer.valueOf(year)-1);
c.set (Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, (Integer.valueOf(week)-1) * 7);
return getFirstDayOfWeek(cal.getTime ());
}
/** * 得到某年前一年某周的最后一天 * * @param year(yyyy) * @param week * @return */
public String getLastYearLastDayOfWeek(String year, String week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, Integer.valueOf(year)-1);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE , (Integer.valueOf(week)-1) * 7);
return getLastDayOfWeek(cal.getTime());
}
/** * 取得指定日期所在周的第一天 * * @param date * @return String(yyyyMMdd) */
public String getFirstDayOfWeek(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return sdf.format(c.getTime());
}
/** * 取得指定日期所在周的最后一天 * * @param date * @return String(yyyyMMdd) */
public String getLastDayOfWeek(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return sdf.format(c.getTime());
}
/** * 取得当前日期所在周的第一天 * * @return */
public Date getFirstDayOfWeek() {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(new Date());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime ();
}
/** * 取得当前日期所在周的最后一天 * * @return */
public Date getLastDayOfWeek() {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(new Date());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
/** * 获取指定月所在的最后一天 */
public String getLastDayOfMonth(String year,String month) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,Integer.valueOf(year));
cal.set(Calendar.MONTH, Integer.valueOf(month)-1);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
return sdf.format(cal.getTime());
}
/** * 获取指定月前一个月所在的最后一天 */
public String getLastMonthLastDayOfMonth(String year,String month) {
YearMonth yearMonth = YearMonth.parse(year+"-"+month);
String s=yearMonth.minus(1, ChronoUnit.MONTHS).toString();
String[] arr = s.split("-");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,Integer.valueOf(arr[0]));
cal.set(Calendar.MONTH, Integer.valueOf(arr[1])-1);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
return sdf1.format(cal.getTime());
}
/** * 获取指定日期对应去年的这天 * @param day(yyyyMMdd) */
public String getNowOfLastYear(String day) {
return String.valueOf(Integer.parseInt(day.substring(0,4)) - 1)+day.substring(4,day.length());
}
/** * 获得指定日期的前一天 * @param day(yyyyMMdd) * @return * @throws Exception */
public String getLastDayOfDay(String day){
Calendar c = Calendar.getInstance();
Date date=null;
try {
date = new SimpleDateFormat("yyyyMMdd").parse(day);
} catch (Exception e) {
e.printStackTrace();
}
c.setTime(date);
int day=c.get(Calendar.DATE);
c.set(Calendar.DATE,day-1);
String dayBefore=new SimpleDateFormat("yyyyMMdd").format(c.getTime());
return dayBefore;
}
}
后记
实际运用可以调整传入参数的类型,和返回值的类型,方便开发。
还没有评论,来说两句吧...