前言

最近做了一个活跃度的需求 产品出了一个根据周数计算活跃度的 !!
感觉很鸡肋 为什么要用周数 谁会记得现在是今年的第几周
没办法 只能苦逼做了 写了好多的日期工具的函数今天分享给大家
我认为可以解决80%以上的日期问题
有满足不了的请大家留言哦

 public static String nextday(String s) {String nextDate = "";SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");try {Date dt = df.parse(s);nextDate = df.format(nextday(dt));} catch (Exception e) {System.out.println("输⼊的⽇期格式有误!");}return nextDate;}public static String beforeDay(String s) {String nextDate = "";SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");try {Date dt = df.parse(s);nextDate = df.format(beforeDate(dt));} catch (Exception e) {System.out.println("输⼊的⽇期格式有误!");}return nextDate;}/*** 获取前n个月* @param n* @return*/public static List<String> beforeMonths(int n) {Date date = new Date();List<String> listDate = new ArrayList<>();for (int i = -n+1; i < 1; i++) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.MONTH, i);Date time = calendar.getTime();DateFormat dateformat = new SimpleDateFormat("yyyy-MM");String strdate = dateformat.format(time);listDate.add(strdate);}return listDate;}/*** 获取前n天* @param n* @return*/public static List<String> beforeDays(int n) {Date date = new Date();List<String> listDate = new ArrayList<>();for (int i = -n+1; i < 1; i++) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.DATE, i);Date time = calendar.getTime();listDate.add(DateUtil.formatDate(time));}return listDate;}/*** 日期范围内的所有日期* @param startTime* @param endTime* @return*/public static List<String> betweenDays(String startTime,String endTime) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 声明保存日期集合List<String> list = new ArrayList<String>();try {// 转化成日期类型Date startDate = sdf.parse(startTime);Date endDate = sdf.parse(endTime);//用Calendar 进行日期比较判断Calendar calendar = Calendar.getInstance();while (startDate.getTime()<=endDate.getTime()){// 把日期添加到集合list.add(sdf.format(startDate));// 设置日期calendar.setTime(startDate);//把日期增加一天calendar.add(Calendar.DATE, 1);// 获取增加后的日期startDate=calendar.getTime();}} catch (ParseException e) {e.printStackTrace();}return list;}/*** 根据日期获取周数* @param time* @return*/public static String getWeekInYear(String time)  {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar cl = Calendar.getInstance();cl.setFirstDayOfWeek(Calendar.MONDAY);try {cl.setTime(sdf.parse(time));} catch (ParseException e) {e.printStackTrace();}int week = cl.get(Calendar.WEEK_OF_YEAR);cl.add(Calendar.DAY_OF_MONTH, -7);int year = cl.get(Calendar.YEAR);if(week<cl.get(Calendar.WEEK_OF_YEAR)){year+=1;}return year+"-"+week;}/*** 根据日期得到日期在内的区间的周数* @param startDate* @param endDate* @return*/public static DayWeekEntity getWeeksToDays(String startDate, String endDate) {LinkedHashSet<String> weekNum = new LinkedHashSet<>();//每周对应的起止时间setLinkedHashSet<List<String>> weekDayScope = new LinkedHashSet<>();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {while (sdf.parse(endDate).compareTo(sdf.parse(startDate)) == 1) {//每周起止日期List<String>  dayOfWeekToStartAndEndDateList=new ArrayList<>();String weekStartDate = dateFormat.format(getThisWeekMonday(dateFormat.parse(startDate)));Calendar calendars=Calendar.getInstance();calendars.setTime(getThisWeekMonday(dateFormat.parse(startDate)));calendars.add(Calendar.DATE,6);String weekEndDate = dateFormat.format(calendars.getTime());dayOfWeekToStartAndEndDateList.add(weekStartDate);dayOfWeekToStartAndEndDateList.add(weekEndDate);weekDayScope.add(dayOfWeekToStartAndEndDateList);//周数weekNum.add(getWeekInYear(startDate));//开始时间到下一周Date date;date = sdf.parse(startDate);//日历时间工具类实例化创建,取得当前时间初值Calendar calendar = Calendar.getInstance();//覆盖掉当前时间calendar.setTime(date);//+7calendar.add(Calendar.DATE, 7);//转换回字符串startDate = sdf.format(calendar.getTime());}} catch (ParseException e) {e.printStackTrace();}//每周起止日期try {List<String> endDayOfWeekToStartAndEndDate=new ArrayList<>();String weekStartDate = dateFormat.format(getThisWeekMonday(dateFormat.parse(endDate)));Calendar calendars=Calendar.getInstance();calendars.setTime(getThisWeekMonday(dateFormat.parse(endDate)));calendars.add(Calendar.DATE,6);String weekEndDate = dateFormat.format(calendars.getTime());endDayOfWeekToStartAndEndDate.add(weekStartDate);endDayOfWeekToStartAndEndDate.add(weekEndDate);weekDayScope.add(endDayOfWeekToStartAndEndDate);} catch (ParseException e) {e.printStackTrace();}//周数weekNum.add(getWeekInYear(endDate));DayWeekEntity dayWeekEntity = new DayWeekEntity();dayWeekEntity.setWeekNum(weekNum);dayWeekEntity.setWeekDayScope(weekDayScope);return dayWeekEntity;}/*** 根据周数查日期* 慎用* @param time* @return*/public static List<String> weekToDay(String time){String[] split = time.split("-");if(split.length!=2){return null;}Integer year= Integer.parseInt(split[0]);Integer week= Integer.parseInt(split[1]);List<String> date=new ArrayList<>();Calendar calendar = Calendar.getInstance();calendar.set(year, 0, 1);int dayOfWeek = 7- calendar.get(Calendar.DAY_OF_WEEK) + 2;//算出第一周还剩几天 +1是因为1号是1天week = week -2;//周数减去第一周再减去要得到的周calendar.add(Calendar.DAY_OF_YEAR, week*7+dayOfWeek);date.add(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));calendar.add(Calendar.DAY_OF_YEAR, 6);date.add(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));return date;}/*** 获取前n周的开始时间和结束时间* @param n* @return*/public static List<String> beforeWeekDay(int n) {if (n < 0) {return new ArrayList<>();}List strList = new ArrayList();String startDate = DateUtil.formatDate(geLastWeekMonday(n*7));String endDate = DateUtil.formatDate(geLastWeekMonday(n*7-6));strList.add(startDate);strList.add(endDate);return strList;}private static Date nextday(Date d) {long daytime = 1 * 24 * 60 * 60 * 1000;Date nd = new Date(d.getTime() + daytime);return nd;}private static Date beforeDate(Date d) {long daytime = 1 * 24 * 60 * 60 * 1000;Date nd = new Date(d.getTime() - daytime);return nd;}private static Date geLastWeekMonday(int n) {Calendar cal = Calendar.getInstance();cal.setTime(getThisWeekMonday(new Date()));cal.add(Calendar.DATE, -n);return cal.getTime();}private static Date getThisWeekMonday(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);return cal.getTime();}​

JAVA日期转换函数(包括:日期、周数的计算)相关推荐

  1. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?

    摘要: 下文讲述MySQL数据库中获取指定日期对应的本年的周数信息的方法分享,如下所示: 实现思路: 采用week系统函数即可获取指定日期在日期所在年度的周数信息 week系统函数语法说明: week ...

  2. java calendar日期计算_利用Java中Calendar计算两个日期之间的天数和周数

    前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每 ...

  3. java日期相差周_利用Java中Calendar计算两个日期之间的天数和周数

    前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每 ...

  4. java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数

    利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...

  5. Calendar计算两个日期之间的天数和周数

    每天一篇开发日记,轻松快乐每一天!今天介绍的是利用java,Calendar类计算出两个日期之间的天数和周数的算法! 计算出日期之间的天数: public Object countTwoDate(Ob ...

  6. PHP Mysql两组时间戳、日期转换函数

    PHP中日期的显示与存储有UNIX时间戳和格式化日期两种方式.Unix时间戳存储.处理方便,但是不直观:格式化日期直观,但是处理起来不如Unix时间戳那么自如.所以数据库中对于日期类型字段的存储采用时 ...

  7. mysql 日期转换天数_MySQL 日期操作 增减天数、时间转换、时间戳

    MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数. select datediff('2008-08-08', '2008-08-01'); ...

  8. matlab 日期转换成数字,日期转换为数字 命令行窗口输入datenu

    如2018年1月1日变成2018.01.01的excel可识别格式.但是有时候数字是1位打开excel表格,在表格内输入中文日期格式的日期,选中单元格. 找到工具栏中的"查找和选项" ...

  9. java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写

    java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...

  10. Java利用正则表达式实现中英文日期转换函数封装

    前言:  Java利用正则表达式实现中英文日期互相转换函数封装,一共实现了6个方法(封装的原因是因为在Android中使用SimpleDateFormat 太麻烦了,各种try catch excep ...

最新文章

  1. 每年的智能车竞赛赛道是如何产生的?
  2. GeoRSS 应用方案
  3. 《金蝶ERP—K/3标准财务模拟实训(11.X版)》——第1章 金蝶K/3标准财务介绍 1.1 金蝶K/3标准财务系统介绍...
  4. 双向TVS管 30KP42CA
  5. Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
  6. hdu 5374 Tetris(模拟)
  7. weblogic启动后,抛出大量的java.lang.ArrayIndexOutOfBoundsException异常
  8. C语言实现学生信息管理系统
  9. Java中判断素数的五种方法
  10. 简易XML文件对比工具
  11. SQLite数据库使用(sqlite3 c++)
  12. 已解决:“apktool” W: invalid resource directory name:XXX\res navigation
  13. 计算机键盘无法使用怎么处理,为什么键盘不能用 键盘不能用怎么办
  14. 3. 二叉哥的二叉树
  15. 从零开始搭建服务器之登录和登出远程服务器
  16. DataSet与DataType
  17. 2022-02-22:机器人大冒险。 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种
  18. 奥义多媒体破解后的恢复③
  19. 数据特征处理之数值型数据(标准化)
  20. (中兴路由器)无中继的DHCP配置实验

热门文章

  1. tp摄像头的默认地址_TPLINK默认IP地址是什么?
  2. 【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
  3. win7与internet时间同步出错_时间同步出错,教您时间同步出错
  4. 872. 叶子相似的树 / 剑指 Offer 33. 二叉搜索树的后序遍历序列 / 剑指 Offer 34. 二叉树中和为某一值的路径 / 剑指 Offer 35. 复杂链表的复制
  5. oracle 对表重建索引,oracle 重建索引方法 分析
  6. 关于微博营销推广案例
  7. 网站备案后可以换服务器吗,域名备案后可以更换服务器吗
  8. go语言如何使用指针?
  9. 顺序结构程序设计实例
  10. WIN7 KB4516065 安装失败