package com.zengjx.health.utils;import org.apache.ibatis.annotations.Insert;
import org.junit.Test;import java.text.SimpleDateFormat;
import java.util.*;/*** 日期操作工具类*/
public class DateUtils {/*** 日期转换-  String -> Date** @param dateString 字符串时间* @return Date类型信息* @throws Exception 抛出异常*/public static Date parseString2Date(String dateString) throws Exception {if (dateString == null) {return null;}return parseString2Date(dateString, "yyyy-MM-dd");}/*** 日期转换-  String -> Date** @param dateString 字符串时间* @param pattern    格式模板* @return Date类型信息* @throws Exception 抛出异常*/public static Date parseString2Date(String dateString, String pattern) throws Exception {if (dateString == null) {return null;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);Date date = sdf.parse(dateString);return date;}/*** 日期转换 Date -> String** @param date Date类型信息* @return 字符串时间* @throws Exception 抛出异常*/public static String parseDate2String(Date date) throws Exception {if (date == null) {return null;}return parseDate2String(date, "yyyy-MM-dd");}/*** 日期转换 Date -> String** @param date    Date类型信息* @param pattern 格式模板* @return 字符串时间* @throws Exception 抛出异常*/public static String parseDate2String(Date date, String pattern) throws Exception {if (date == null) {return null;}SimpleDateFormat sdf = new SimpleDateFormat(pattern);String strDate = sdf.format(date);return strDate;}/*** 获取当前日期的本周一是几号** @return 本周一的日期*/public static Date getThisWeekMonday() {Calendar cal = Calendar.getInstance();cal.setTime(new 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();}/*** 获取当前日期周的最后一天** @return 当前日期周的最后一天*/public static Date getSundayOfThisWeek() {Calendar c = Calendar.getInstance();int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;if (dayOfWeek == 0) {dayOfWeek = 7;}c.add(Calendar.DATE, -dayOfWeek + 7);return c.getTime();}/*** 根据日期区间获取月份列表** @param minDate 开始时间* @param maxDate 结束时间* @return 月份列表* @throws Exception*/public static List<String> getMonthBetween(String minDate, String maxDate, String format) throws Exception {ArrayList<String> result = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");Calendar min = Calendar.getInstance();Calendar max = Calendar.getInstance();min.setTime(sdf.parse(minDate));min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);max.setTime(sdf.parse(maxDate));max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);SimpleDateFormat sdf2 = new SimpleDateFormat(format);Calendar curr = min;while (curr.before(max)) {result.add(sdf2.format(curr.getTime()));curr.add(Calendar.MONTH, 1);}return result;}/*** 根据日期获取年度中的周索引** @param date 日期* @return 周索引* @throws Exception*/public static Integer getWeekOfYear(String date) throws Exception {Date useDate = parseString2Date(date);Calendar cal = Calendar.getInstance();cal.setTime(useDate);return cal.get(Calendar.WEEK_OF_YEAR);}/*** 根据年份获取年中周列表** @param year 年分* @return 周列表* @throws Exception*/public static Map<Integer, String> getWeeksOfYear(String year) throws Exception {Date useDate = parseString2Date(year, "yyyy");Calendar cal = Calendar.getInstance();cal.setTime(useDate);//获取年中周数量int weeksCount = cal.getWeeksInWeekYear();Map<Integer, String> mapWeeks = new HashMap<>(55);for (int i = 0; i < weeksCount; i++) {cal.get(Calendar.DAY_OF_YEAR);mapWeeks.put(i + 1, parseDate2String(getFirstDayOfWeek(cal.get(Calendar.YEAR), i)));}return mapWeeks;}/*** 获取某年的第几周的开始日期** @param year 年分* @param week 周索引* @return 开始日期* @throws Exception*/public static Date getFirstDayOfWeek(int year, int week) throws Exception {Calendar c = new GregorianCalendar();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, Calendar.JANUARY);c.set(Calendar.DATE, 1);Calendar cal = (GregorianCalendar) c.clone();cal.add(Calendar.DATE, week * 7);return getFirstDayOfWeek(cal.getTime());}/*** 获取某年的第几周的结束日期** @param year 年份* @param week 周索引* @return 结束日期* @throws Exception*/public static Date getLastDayOfWeek(int year, int week) throws Exception {Calendar c = new GregorianCalendar();c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, Calendar.JANUARY);c.set(Calendar.DATE, 1);Calendar cal = (GregorianCalendar) c.clone();cal.add(Calendar.DATE, week * 7);return getLastDayOfWeek(cal.getTime());}/*** 获取当前时间所在周的开始日期** @param date 当前时间* @return 开始时间*/public static Date getFirstDayOfWeek(Date date) {Calendar c = new GregorianCalendar();c.setFirstDayOfWeek(Calendar.SUNDAY);c.setTime(date);c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());return c.getTime();}/*** 获取当前时间所在周的结束日期** @param date 当前时间* @return 结束日期*/public static Date getLastDayOfWeek(Date date) {Calendar c = new GregorianCalendar();c.setFirstDayOfWeek(Calendar.SUNDAY);c.setTime(date);c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);return c.getTime();}//获得上周一的日期public static Date geLastWeekMonday(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(getThisWeekMonday(date));cal.add(Calendar.DATE, -7);return cal.getTime();}//获得本周一的日期public 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();}//获得下周一的日期public static Date getNextWeekMonday(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(getThisWeekMonday(date));cal.add(Calendar.DATE, 7);return cal.getTime();}//获得今天日期public static Date getToday(){return new Date();}//获得本月一日的日期public static Date getFirstDay4ThisMonth(){Calendar calendar = Calendar.getInstance();calendar.set(Calendar.DAY_OF_MONTH,1);return calendar.getTime();}//获得本月最后一日的日期public static Date getLastDay4ThisMonth(){Calendar calendar = Calendar.getInstance();calendar.add(Calendar.MONTH, 1);calendar.set(Calendar.DAY_OF_MONTH, 0);return calendar.getTime();}public static void main(String[] args) {try {// System.out.println("本周一" + parseDate2String(getThisWeekMonday()));//  System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));//   getToday();test3();} catch (Exception e) {e.printStackTrace();}}public    static   void   test1(){getToday();try {System.out.println(parseDate2String(getToday()));//2019-10-25} catch (Exception e) {e.printStackTrace();}}//获得本周1的日期public    static   void   test2(){getToday();try {System.out.println(parseDate2String(getThisWeekMonday()));//2019-10-25} catch (Exception e) {e.printStackTrace();}}//获得本周1的日期public    static   void   test3(){getToday();try {System.out.println(parseDate2String(getSundayOfThisWeek()));//2019-10-25} catch (Exception e) {e.printStackTrace();}}//获取两个月份之间的每个月份@Testpublic      void   test4(){List<String> monthBetween = null;try {monthBetween = getMonthBetween("2018-09", "2019-10", "yyyy-MM");} catch (Exception e) {e.printStackTrace();}System.out.println(" monthBetween"+monthBetween);// monthBetween[2018-09, 2018-10, 2018-11, 2018-12, 2019-01, 2019-02, 2019-03, 2019-04, 2019-05, 2019-06, 2019-07, 2019-08, 2019-09, 2019-10]}
}

通用模块系列--日期操作工具类相关推荐

  1. Java日期操作工具类

    /*** 格式化日期显示格式** @param sdate* 原始日期格式 s - 表示 "yyyy-mm-dd" 形式的日期的 String 对象* @param format* ...

  2. java 日期操作工具类_java8操作日期的工具类

    java8操作日期的工具类 一.方法概览 该包的API提供了大量相关的方法,这些方法一般有一致的方法前缀: of:静态工厂方法. parse:静态工厂方法,关注于解析. get:获取某些东西的值. i ...

  3. Android基础常用日期操作工具类

    将指定日期格式转换为毫秒(一) public class DataUtil {/*** "2015-01-01" 将指定的日期格式转换为毫秒* @param time* @retu ...

  4. Java日期时间类及计算

    1. Java中与日期相关的类 1.1 java.util包 类名 具体描述 Date Date对象算是JAVA中历史比较悠久的用于处理日期.时间相关的类了,但是随着版本的迭代演进,其中的众多方法都已 ...

  5. 【强烈推荐】如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站...

    [强烈推荐]如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站 [强烈推荐]如何解决JQuery类Post方式的跨域问题 博客分类:核心代码片段 jQ ...

  6. 【Java基础系列教程】第十四章 Java 包装类、日期与日期格式化类、数值格式化等常用类详解

    一.包装类 1.1 什么是包装类 Java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化交互.           ...

  7. AP类WiFi模块系列一:核心板式AP类WiFi模块

    WiFi模块主要有网卡类和AP类两大类.     网卡类WiFi模块通信接口.通信信道.综合功能可以大体分成八大类:AP类的WiFi模块可以分为核心板式AP类WiFi模块(核心板方式,只引出接口pin ...

  8. 网卡类WiFi模块系列三:USB接口双通道单/双频WiFi模块

    WiFi模块主要有网卡类和AP类两大类.网卡类WiFi模块通信接口.通信信道.综合功能可以大体分成八大类:AP类的WiFi模块可以分为嵌入式AP模块(核心板方式,只引出接口pin脚)和AP主板(也就是 ...

  9. 我的日期工具类、java常见时间的处理方法

    标题 SimpleDateFormat类到底为啥不是线程安全的? Calendar类roll和add的区别 我的时间操作工具类 判断日期是否是今天,本周,本月,本季度,本年 获取手动设置指定日期 返回 ...

最新文章

  1. 这款耳机一点不输千元级的AirPods
  2. 微服务组件记事本:Skywalking的ES索引 · 收藏篇
  3. [HDOJ5289]Assignment(RMQ,二分)
  4. Mysql的两种存储引擎以及区别
  5. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
  6. 常用nginx rewrite重定向-跳转实例
  7. 您从事运维有几年了?
  8. axure 抖音部件库_原型技巧:如何用Axure画出抖音APP页面色彩风格(干货技能)...
  9. 毕向东_Java基础
  10. 三维扫描3D打印在创客教育中的实际应用
  11. Excel数据导出到txt文档
  12. 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
  13. MIUI的JAVA导出
  14. 2020秋招笔试依图科技编程题
  15. 在线制作网站sitemap并提交
  16. 理解杀毒软件的意义(完整---另加补充和总结)
  17. 什么是计算机病毒,看这里
  18. javascript实现blob加密视频源地址
  19. 面试时薪资要少了怎么办?
  20. 新型冠状病毒肺炎相关常用英语单词和词语

热门文章

  1. 厚积薄发 臻于至善,用友U9 cloud“王者归来”
  2. 珠玉落盘【珠盘玉落】
  3. 用Html实现世纪佳缘交友注册页面是什么体验?
  4. 常见编程语言对REPL支持情况小结[转]
  5. Linux MTD子系统学习(二)
  6. 前端页面闪烁提示用户
  7. 【Node.js】论一个低配版Web实时通信库是如何实现的1( WebSocket篇)
  8. 五猴分桃python_五猴分桃问题
  9. 傅里叶描述子、HOG特征描述子原理及matlab代码
  10. html5人脸拼图,layout拼图