DATE类常用方法总结


import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;/*** 日期处理* * @author yzj*/
public class DateUtils {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");System.out.println("今天日期:"+sdf.format(new Date()));System.out.println("昨天日期:"+getYesterdayYmd());System.out.println("上月时间:"+getBeforeMonth());System.out.println("上个月第一天:"+ getBeforeFirstMonthdate());System.out.println("上个月最后一天:"+getBeforeLastMonthdate());System.out.println("上周的开始时间:"+getBeginDayOfLastWeek() );System.out.println("上周的结束时间:"+getEndDayOfLastWeek());System.out.println("判断当前日期是这周内的第几天:"+getWeekOfDate(new Date()));//下面为当前日期所在周的具体时间List<String> dayByWeek = getDayByWeek();for (String s:dayByWeek) {System.out.println(s);}System.out.println("上周所有日期集合:");List<Date> lastWeekDates = findLastWeekDates(sdf.parse(getBeginDayOfLastWeek()), sdf.parse(getEndDayOfLastWeek()));for (Date date:lastWeekDates) {System.out.println(sdf.format(date));}System.out.println("本周日期统计(周一至当日,顺序排列)");Map<String, List<String>> stringListMap = thisMonthsDate();for (String s:stringListMap.get("1")) {System.out.println("上月日期:"+s);}for (String s:stringListMap.get("0")) {System.out.println("当月日期:"+s);}System.out.println("上周日期统计:");Map<String, List<String>> stringListMap1 = lastMonthsDate();List<String> list = stringListMap1.get("1");for (String s:list) {System.out.println("上月日期:"+s);}List<String> list1 = stringListMap1.get("0");for (String s:list1) {System.out.println("当月日期:"+s);}}/*** 上周日期统计   两种模式   type 0  都是当月  type  1  都是上月*/public static Map<String,List<String>> lastMonthsDate() throws ParseException {SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");Map<String,List<String>> map=new HashMap<>();//1、上周周一是当月日期if(isThisTime(getBeginDayOfLastWeek())){List<Date> lastWeekDates = findLastWeekDates(simpleDateFormat.parse(getBeginDayOfLastWeek()), simpleDateFormat.parse(getEndDayOfLastWeek()));List<String> list=new ArrayList<>();for (Date date:lastWeekDates) {list.add(simpleDateFormat.format(date));}map.put("0",list);map.put("1",new ArrayList<>());return map;}//2、上周周一是上月日期且上周周末也是上月日期if(isThisTime(getBeginDayOfLastWeek())&&isThisTime(getEndDayOfLastWeek())){List<Date> lastWeekDates = findLastWeekDates(simpleDateFormat.parse(getBeginDayOfLastWeek()), simpleDateFormat.parse(getEndDayOfLastWeek()));List<String> list=new ArrayList<>();for (Date date:lastWeekDates) {list.add(simpleDateFormat.format(date));}map.put("0",new ArrayList<>());map.put("1",list);return map;}//3、上周周一是上月日期但上周周末是本月日期  跨月统计//本月日期统计List<String> listNow=new ArrayList<>();//上月日期统计List<String> listLast=new ArrayList<>();List<Date> lastWeekDates = findLastWeekDates(simpleDateFormat.parse(getBeginDayOfLastWeek()), simpleDateFormat.parse(getEndDayOfLastWeek()));for (Date date:lastWeekDates) {//如果日期是当月日期if(DateUtils.isThisTime(simpleDateFormat.format(date))){listNow.add(simpleDateFormat.format(date));}else {listLast.add(simpleDateFormat.format(date));}}map.put("0",listNow);map.put("1",listLast);return map;}/*** 本周日期统计,分两类,本周包含上月/本周只有当月   两种模式   type 0  当月  type  1  上月*/public static Map<String,List<String>> thisMonthsDate(){SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");Map<String,List<String>> map=new HashMap<>();//1、本周周一日期是当月日期List<String> dayByWeek = getDayByWeek();if(isThisTime(dayByWeek.get(0))){map.put("0",dayByWeek);map.put("1",new ArrayList<>());return map;}//2、本周周一是上月日期//本月日期统计List<String> listNow=new ArrayList<>();//上月日期统计List<String> listLast=new ArrayList<>();for (String date : dayByWeek) {if (isThisTime(date)) {listNow.add(date);} else {listLast.add(date);}}map.put("0",listNow);map.put("1",listLast);return map;}/**** date yyyy-MM-dd* @return: boolean* @since 1.0.0* @Description: 判断时间是否本月日期*/public static boolean isThisTime(String date) {String beforeFirstMonthdate = getBeforeFirstMonthdate();if(beforeFirstMonthdate.split("-")[1].equals(date.split("-")[1])){return false;}return true;}/*** 获取一周开始到结束的list集合* @param dBegin* @param dEnd* @return*/public static List<Date> findLastWeekDates(Date dBegin, Date dEnd){List lDate = new ArrayList();lDate.add(dBegin);Calendar calBegin = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calBegin.setTime(dBegin);Calendar calEnd = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calEnd.setTime(dEnd);// 测试此日期是否在指定日期之后while (dEnd.after(calBegin.getTime())){// 根据日历的规则,为给定的日历字段添加或减去指定的时间量calBegin.add(Calendar.DAY_OF_MONTH, 1);lDate.add(calBegin.getTime());}return lDate;}/*** 获取本周具体日期* @return*/public static List<String> getDayByWeek(){List<String> data = new ArrayList<>();try {//获取本周时间String yzTime = getTimeInterval(new Date());String[] time = yzTime.split(",");//本周第一天String startTime = time[0];//本周最后一天String endTime = time[1];//格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date dBegin = sdf.parse(startTime);Date dEnd = sdf.parse(endTime);//获取这周所有dateList<Date> lDate = findDates(dBegin, dEnd);for (Date date : lDate) {if(sdf.format(new Date()).equals(sdf.format(date))){data.add(sdf.format(date));break;}data.add(sdf.format(date));}} catch (Exception e) {e.printStackTrace();}return data;}// 根据指定日期获取一周的第一天和最后一天日期public static String getTimeInterval(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(date);// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了// 获得当前日期是一个星期的第几天int dayWeek = cal.get(Calendar.DAY_OF_WEEK);if (1 == dayWeek) {cal.add(Calendar.DAY_OF_MONTH, -1);}// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一cal.setFirstDayOfWeek(Calendar.MONDAY);// 获得当前日期是一个星期的第几天int day = cal.get(Calendar.DAY_OF_WEEK);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String imptimeBegin = sdf.format(cal.getTime());cal.add(Calendar.DATE, 6);String imptimeEnd = sdf.format(cal.getTime());return imptimeBegin + "," + imptimeEnd;}/*** 查找日期* @param dBegin 开始日期* @param dEnd 结束日期* @return List<Date>*/public static List<Date> findDates(Date dBegin, Date dEnd) {List<Date> lDate = new ArrayList<>();lDate.add(dBegin);Calendar calBegin = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calBegin.setTime(dBegin);Calendar calEnd = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calEnd.setTime(dEnd);// 测试此日期是否在指定日期之后while (dEnd.after(calBegin.getTime())){// 根据日历的规则,为给定的日历字段添加或减去指定的时间量calBegin.add(Calendar.DAY_OF_MONTH, 1);lDate.add(calBegin.getTime());}return lDate;}/*** 获取当前日期是星期几** @param dt* @return 当前日期是星期几*/public static String getWeekOfDate(Date dt) {String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"};Calendar cal = Calendar.getInstance();cal.setTime(dt);int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0)w = 0;return weekDays[w];}// 获取上周的开始时间public static String getBeginDayOfLastWeek() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = new Date();if (date == null) {return null;}Calendar cal = Calendar.getInstance();cal.setTime(date);int dayofweek = cal.get(Calendar.DAY_OF_WEEK);if (dayofweek == 1) {dayofweek += 7;}cal.add(Calendar.DATE, 2 - dayofweek - 7);return sdf.format(cal.getTime());}// 获取上周的结束时间public static String getEndDayOfLastWeek()  {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = Calendar.getInstance();try {cal.setTime(sdf.parse(getBeginDayOfLastWeek()) );}catch (ParseException parseException){}cal.add(Calendar.DAY_OF_WEEK, 6);Date weekEndSta = cal.getTime();return sdf.format(weekEndSta) ;}//4、获取上个月的第一天public static String getBeforeFirstMonthdate(){SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");Calendar calendar=Calendar.getInstance();calendar.add(Calendar.MONTH, -1);calendar.set(Calendar.DAY_OF_MONTH, 1);return format.format(calendar.getTime());}//5、获取上个月的最后一天public static String getBeforeLastMonthdate(){SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");Calendar calendar=Calendar.getInstance();int month=calendar.get(Calendar.MONTH);calendar.set(Calendar.MONTH, month-1);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));return sf.format(calendar.getTime());}//获取昨天日期 年月日   判断了是否当月最后一天public static Map<String,String> getYesterdayYmd() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = new GregorianCalendar();cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MILLISECOND, 0);cal.add(Calendar.DAY_OF_MONTH, -1);Map<String,String> map=new HashMap();if(isLastDayOfMonth(cal.getTime())){//是当月最后一天map.put("isFor","true");map.put("date",sdf.format(cal.getTime()));}else{//不是当月最后一天map.put("isFor","false");map.put("date",sdf.format(cal.getTime()));}return map;}//获取昨天日期 年月日public static String getYesterdayString() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar cal = new GregorianCalendar();cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MILLISECOND, 0);cal.add(Calendar.DAY_OF_MONTH, -1);return sdf.format(cal.getTime());}/*** 判断给定日期是否是当月的最后一天* @param date* @return*/public static boolean isLastDayOfMonth(Date date) {//1、创建日历类Calendar calendar = Calendar.getInstance();//2、设置当前传递的时间,不设就是当前系统日期calendar.setTime(date);//3、data的日期是N,那么N+1【假设当月是30天,30+1=31,如果当月只有30天,那么最终结果为1,也就是下月的1号】calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));//4、判断是否是当月最后一天【1==1那么就表明当天是当月的最后一天返回true】if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {return true;}else{return false;}}/*** 获取上个月日期   yyyy-MM-dd 格式* @return*/public static String getBeforeMonth(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义日期显示格式Calendar c = Calendar.getInstance();c.add(Calendar.MONTH, -1);
//        上个月时间String before = sdf.format(c.getTime());return before;}/** 时间格式(yyyy-MM-dd) */public final static String DATE_PATTERN = "yyyy-MM-dd";/** 时间格式(yyyy-MM-dd HH:mm:ss) */public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";/*** 日期格式化 日期格式为:yyyy-MM-dd* @param date  日期* @return  返回yyyy-MM-dd格式日期*/public static String format(Date date) {return format(date, DATE_PATTERN);}/*** 日期格式化 日期格式为:yyyy-MM-dd* @param date  日期* @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN* @return  返回yyyy-MM-dd格式日期*/public static String format(Date date, String pattern) {if(date != null){SimpleDateFormat df = new SimpleDateFormat(pattern);return df.format(date);}return null;}/*** 日期解析* @param date  日期* @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN* @return  返回Date*/public static Date parse(String date, String pattern) {try {return new SimpleDateFormat(pattern).parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}/*** 字符串转换成日期* @param strDate 日期字符串* @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN*/public static Date stringToDate(String strDate, String pattern) {if (StringUtils.isBlank(strDate)){return null;}DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);return fmt.parseLocalDateTime(strDate).toDate();}/*** 根据周数,获取开始日期、结束日期* @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周* @return  返回date[0]开始日期、date[1]结束日期*/public static Date[] getWeekStartAndEnd(int week) {DateTime dateTime = new DateTime();LocalDate date = new LocalDate(dateTime.plusWeeks(week));date = date.dayOfWeek().withMinimumValue();Date beginDate = date.toDate();Date endDate = date.plusDays(6).toDate();return new Date[]{beginDate, endDate};}/*** 对日期的【秒】进行加/减** @param date 日期* @param seconds 秒数,负数为减* @return 加/减几秒后的日期*/public static Date addDateSeconds(Date date, int seconds) {DateTime dateTime = new DateTime(date);return dateTime.plusSeconds(seconds).toDate();}/*** 对日期的【分钟】进行加/减** @param date 日期* @param minutes 分钟数,负数为减* @return 加/减几分钟后的日期*/public static Date addDateMinutes(Date date, int minutes) {DateTime dateTime = new DateTime(date);return dateTime.plusMinutes(minutes).toDate();}/*** 对日期的【小时】进行加/减** @param date 日期* @param hours 小时数,负数为减* @return 加/减几小时后的日期*/public static Date addDateHours(Date date, int hours) {DateTime dateTime = new DateTime(date);return dateTime.plusHours(hours).toDate();}/*** 对日期的【天】进行加/减** @param date 日期* @param days 天数,负数为减* @return 加/减几天后的日期*/public static Date addDateDays(Date date, int days) {DateTime dateTime = new DateTime(date);return dateTime.plusDays(days).toDate();}/*** 对日期的【周】进行加/减** @param date 日期* @param weeks 周数,负数为减* @return 加/减几周后的日期*/public static Date addDateWeeks(Date date, int weeks) {DateTime dateTime = new DateTime(date);return dateTime.plusWeeks(weeks).toDate();}/*** 对日期的【月】进行加/减** @param date 日期* @param months 月数,负数为减* @return 加/减几月后的日期*/public static Date addDateMonths(Date date, int months) {DateTime dateTime = new DateTime(date);return dateTime.plusMonths(months).toDate();}/*** 对日期的【年】进行加/减** @param date 日期* @param years 年数,负数为减* @return 加/减几年后的日期*/public static Date addDateYears(Date date, int years) {DateTime dateTime = new DateTime(date);return dateTime.plusYears(years).toDate();}
}

加入了本周上周跨月的一个日期统计

DATE类各种方法总结相关推荐

  1. date类before()方法的主要作用是_DateFormat类的子类:SimpleDateFormat

    API java.lang.Object 继承者 java.text.Format 继承者 java.text.DateFormat 继承者 java.text.SimpleDateFormat // ...

  2. Date 类 getTime() 方法

    Returns:the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this date. 然后我 ...

  3. date类before()方法的主要作用是_黄精的主要作用及中医食疗方法

    黄精又名米脯.兔竹,性平而味甘,无毒,归脾肺肾三经,属药食两用,在过去被认为是一种延缓衰老的中药,主要功效是益气补中.润肺利脾.滋阴润燥.养肝补肾,主要作用于脾胃虚弱.厌食口干.精血不足.肺燥干咳.免 ...

  4. 【Java】Date类和Calendar类必知必会

    Date类简介 Date 类: java.util.Date Date 类表示指定的时间信息,可以精确到毫秒 不支持国际化 该类的许多方法已过时 获取当前系统时间: new Date(); 其实这个构 ...

  5. java 中date类常用方法

    1.Date 代表一个特定的时间,精确到毫秒: 方法名 说明 public Date() 创建一个Date对象,表示默认时间:把当前时间封装成Date对象 public Date(long date) ...

  6. java date的使用_java:Date类的概述和方法使用

    * A:Date类的概述 * 类 Date 表示特定的瞬间,精确到毫秒. * B:构造方法 * public Date() * public Date(long date) * C:成员方法 * pu ...

  7. Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString()方法分别显示上述日期

    Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString方法分别显示上述日期 题目 代码 思路 代码 题目 代码 思路 ...

  8. java基础—Date类的常见方法演示

    Date 中的常用方法演示 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleD ...

  9. Java 中Date类getTime()的方法

    Java 中Date类getTime()的方法 1.getTime() /**Returns the number of milliseconds since January 1, 1970, 00: ...

最新文章

  1. 这只狗,其实是猫变的:“撸猫神器”StarGAN v2来了!
  2. OpenCV分配与释放图像空间
  3. 某设备产品漏洞挖掘-从JS文件挖掘RCE
  4. VS与SVN的交互VisualSVN
  5. Linux单磁盘根分区扩容(非LVM)
  6. air什么意思中文_Air 的中文意思是什么?
  7. Java题-直接赋值与重新创建内存
  8. 全国各高校开学时间汇总!
  9. 前端html面试题及答案2019,前端面试题及答案2019-20210415034948.docx-原创力文档
  10. 面向对象编程启思录——读《OOD启思录》有感
  11. ALSA驱动、设备函数调用关系
  12. Java实用知识记录 —— 截止到Java8
  13. 手持终端的时候应该有数据线
  14. 阿里旺旺新老版本共存
  15. 第十一章 Mock.js 数据生成器
  16. html旅游网站设计与实现——绿色古典旅游景区 HTML+CSS+JavaScript
  17. 连接部分蓝牙耳机播放音乐无声音(aptx)问题
  18. 网管必用的10款软件系统
  19. C语言超全学习路线(少走弯路)
  20. w10 计算机配置在哪里,w10如何查看电脑配置

热门文章

  1. 如何在S32K144中优雅地输出调试信息
  2. Revit教程免费下载——Revit建筑施工图高级视频课程
  3. VRTK基础入门案例演示
  4. 生于MVP,死于PMF
  5. [HCIP-IoT Developer V2.5 题库] 1-50 题 华为
  6. 词向量:对word2vec的理解
  7. 深度学习--猫狗大战pytorch实战
  8. GY-US42超声波传感器模块介绍
  9. LG HBS730蓝牙耳机使用总结
  10. python_数麦子