java最好的日期工具包_非常好用的日期工具类

package com.liqiliang.health.resources.utils;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.*;

/**

* 日期操作工具类

*/

public class DateUtils {

/**

* 日期转换- String -> Date

*

* @param dateString 字符串时间

* @return Date类型信息

* @throws Exception 抛出异常

*/

public static Date parseString2Date(String dateString) {

if (dateString == null) {

return null;

}

try {

return parseString2Date(dateString, "yyyy-MM-dd");

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException("传入字符串必须:yyyy-MM-dd");

}

}

/**

* 日期转换- String -> Date

*

* @param dateString 字符串时间

* @param pattern 格式模板

* @return Date类型信息

* @throws Exception 抛出异常

*/

public static Date parseString2Date(String dateString, String pattern) {

if (dateString == null) {

return null;

}

try {

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

Date date = sdf.parse(dateString);

return date;

} catch (ParseException e) {

e.printStackTrace();

throw new RuntimeException("传入字符串必须:yyyy/MM/dd");

}

}

/**

* 日期转换 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) {

if (date == null) {

return null;

}

try {

SimpleDateFormat sdf = new SimpleDateFormat(pattern);

String strDate = sdf.format(date);

return strDate;

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/**

* 获取当前日期的本周一是几号

*

* @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 getMonthBetween(String minDate, String maxDate, String format) throws Exception {

ArrayList 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 getWeeksOfYear(String year) throws Exception {

Date useDate = parseString2Date(year, "yyyy");

Calendar cal = Calendar.getInstance();

cal.setTime(useDate);

//获取年中周数量

int weeksCount = cal.getWeeksInWeekYear();

Map 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 getFirstDay4CurrentMonth() {

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.DAY_OF_MONTH, 1);

return calendar.getTime();

}

// 获取指定年和月 的最后一天日期

public static Date getLastDayOfYearAndMonth(int year, int month) {

//获取Calendar类的实例

Calendar c = Calendar.getInstance();

//设置年份

c.set(Calendar.YEAR, year);

//设置月份,因为月份从0开始,所以用month - 1

c.set(Calendar.MONTH, month - 1);

//获取当前时间下,该月的最大日期的数字

int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);

//将获取的最大日期数设置为Calendar实例的日期数

c.set(Calendar.DAY_OF_MONTH, lastDay);

//获取当前月第一天c.set(Calendar.DAY_OF_MONTH, lastDay);

Date time = c.getTime();

String parseDate2String = parseDate2String(time, "yyyy/MM/dd");

Date date = parseString2Date(parseDate2String, "yyyy/MM/dd");

return date;

}

// 获取传入日期所在月的最后一天

public static Date getLastDayOfMonth( Date date) {

final Calendar cal = Calendar.getInstance();

cal.setTime(date);

final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

cal.set(Calendar.DAY_OF_MONTH, last);

return cal.getTime();

}

// 获取传入日期所在月的第一天

public static Date getFirstDayDateOfMonth(Date date) {

final Calendar cal = Calendar.getInstance();

cal.setTime(date);

final int last = cal.getActualMinimum(Calendar.DAY_OF_MONTH);

cal.set(Calendar.DAY_OF_MONTH, last);

return cal.getTime();

}

// 获取当前过去12个月 年-月

public static List getLast12PerMonth (){

//获取日历对象

Calendar calendar = Calendar.getInstance();

//设置日历往前推12个月

calendar.add(Calendar.MONTH,-12);

List list = new ArrayList();

for(int i=0;i<12;i++){

//获取每个月的时间

Date time = calendar.getTime();

//获取每个月的月份

String month = new SimpleDateFormat("yyyy-MM").format(time);

String beginDate = month;

list.add(beginDate);

calendar.add(Calendar.MONTH,1);

}

return list;

}

// 获取当前过去12个月 年-月-日

public static List getLast12FirstDatePerMonth (){

//获取日历对象

Calendar calendar = Calendar.getInstance();

//设置日历往前推12个月

calendar.add(Calendar.MONTH,-12);

List list = new ArrayList();

for(int i=0;i<12;i++){

//获取每个月的时间

Date time = calendar.getTime();

//获取每个月的月份

String month = new SimpleDateFormat("yyyy-MM").format(time);

String beginDate = month+"-1";

list.add(beginDate);

calendar.add(Calendar.MONTH,1);

}

return list;

}

// 获取当前过去12个月

public static List getLast12EndDatePerMonth (){

//获取日历对象

Calendar calendar = Calendar.getInstance();

//设置日历往前推12个月

calendar.add(Calendar.MONTH,-12);

List list = new ArrayList();

for(int i=0;i<12;i++){

//获取每个月的时间

Date time = calendar.getTime();

//获取每个月的月份

String month = new SimpleDateFormat("yyyy-MM").format(time);

String beginDate = month+"-31";

list.add(beginDate);

calendar.add(Calendar.MONTH,1);

}

return list;

}

public static void main(String[] args) throws Exception {

// try {

// System.out.println("本周一" + parseDate2String(getThisWeekMonday()));

// System.out.println("本月一日" + parseDate2String(getFirstDay4ThisMonth()));

// } catch (Exception e) {

// e.printStackTrace();

// }

// Date date = parseString2Date("2020/1/2","yyyy/MM/dd");

// System.out.println(date);

// System.out.println(getLast12FirstDatePerMonth());

// System.out.println(getLast12EndDatePerMonth());

// Date lastDayOfMonth = getLastDayOfMonth(new Date());

// System.out.println(lastDayOfMonth);

// Date firstDayDateOfMonth = getFirstDayDateOfMonth(new Date());

// System.out.println(firstDayDateOfMonth);

// Date f = new Date();

// System.out.println(f.getDate());

}

}

``` java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值