Java 时间工具类

news/2025/2/15 17:30:05/
借鉴网上资源与工作中经验整理的时间工具类(主要针对java.util.Date的使用,java8后的时间工具下期整理),欢迎大家一起完善补充。@Slf4j
public class DateUtils {/*** 定时器时间*/public static final String FORMAT_CRON = "ss mm HH dd MM ?";/*** 日期格式*/public static final String FORMAT_DATE = "yyyyMMdd";/*** 日期格式 -*/public static final String FORMAT_DATE_HORIZONTAL = "yyyy-MM-dd";/*** 日期格式 /*/public static final String FORMAT_DATE_BIAS = "yyyy/MM/dd";/*** 时间格式*/public static final String FORMAT_TIME = "HHmmss";/*** 时间格式 :*/public static final String FORMAT_TIME_COLON = "HH:mm:ss";/*** 完整日期*/public static final String FORMAT_DATETIME = "yyyyMMddhhmmss";/*** 完整日期 -*/public static final String FORMAT_DATETIME_HORIZONTAL = "yyyy-MM-dd HH:mm:ss";/*** 完整日期 /*/public static final String FORMAT_DATETIME_BIAS = "yyyy/MM/dd HH:mm:ss";private DateUtils() {}/**=================================    今天、昨天、本周、上周、本年及特定时间的开始时间和结束时间   ================================**//*** 获取当天开始时间** @return java.util.Date*/public static Date getDayBegin() {Calendar cal = Calendar.getInstance();cal.set(Calendar.HOUR_OF_DAY, 0);   //0点cal.set(Calendar.MINUTE, 0);        //0分cal.set(Calendar.SECOND, 0);        //0秒cal.set(Calendar.MILLISECOND, 0);   //0毫秒return cal.getTime();}/*** 获取当天结束时间** @return java.util.Date*/public static Date getDayEnd() {Calendar cal = Calendar.getInstance();cal.set(Calendar.HOUR_OF_DAY, 23);  //23点cal.set(Calendar.MINUTE, 59);       //59分cal.set(Calendar.SECOND, 59);       //59秒return cal.getTime();}/*** 获取昨天开始时间** @return java.util.Date*/public static Date getBeginDayOfYesterday() {Calendar cal = Calendar.getInstance();cal.setTime(getDayBegin());                 //当天开始时间cal.add(Calendar.DAY_OF_MONTH, -1); //当天月份天数减1return cal.getTime();}/*** 获取昨天结束时间** @return java.util.Date*/public static Date getEndDayOfYesterday() {Calendar cal = Calendar.getInstance();cal.setTime(getDayEnd());                       //当天结束时间cal.add(Calendar.DAY_OF_MONTH, -1);     //当天月份天数减1return cal.getTime();}/*** 获取明天开始时间** @return java.util.Date*/public static Date getBeginDayOfTomorrow() {Calendar cal = Calendar.getInstance();cal.setTime(getDayBegin());                 //当天开始时间cal.add(Calendar.DAY_OF_MONTH, 1);  //当天月份天数加1return cal.getTime();}/*** 获取明天结束时间** @return java.util.Date*/public static Date getEndDayOfTomorrow() {Calendar cal = Calendar.getInstance();cal.setTime(getDayEnd());                   //当天结束时间cal.add(Calendar.DAY_OF_MONTH, 1);  //当天月份天数加1return cal.getTime();}/*** 获取某个日期的开始时间** @param d 指点日期* @return Timestamp*/public static Timestamp getDayStartTime(Date d) {Calendar calendar = Calendar.getInstance();if (null != d) {calendar.setTime(d);}calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);calendar.set(Calendar.MILLISECOND, 0);return new Timestamp(calendar.getTimeInMillis());}/*** 获取某个日期的结束时间** @param d 指定日期* @return Timestamp*/public static Timestamp getDayEndTime(Date d) {Calendar calendar = Calendar.getInstance();if (null != d) {calendar.setTime(d);}calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);calendar.set(Calendar.MILLISECOND, 999);return new Timestamp(calendar.getTimeInMillis());}/*** 获取本周的开始时间** @return java.util.Date*/@SuppressWarnings("unused")public static Date getBeginDayOfWeek() {Date date = new Date();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);return getDayStartTime(cal.getTime());}/*** 获取本周的结束时间** @return java.util.Date*/public static Date getEndDayOfWeek() {Calendar cal = Calendar.getInstance();cal.setTime(getBeginDayOfWeek());cal.add(Calendar.DAY_OF_WEEK, 6);Date weekEndSta = cal.getTime();return getDayEndTime(weekEndSta);}/*** 获取上周开始时间*/@SuppressWarnings("unused")public static Date getBeginDayOfLastWeek() {Date date = new Date();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 getDayStartTime(cal.getTime());}/*** 获取上周的结束时间** @return java.util.Date*/public static Date getEndDayOfLastWeek() {Calendar cal = Calendar.getInstance();cal.setTime(getBeginDayOfLastWeek());cal.add(Calendar.DAY_OF_WEEK, 6);Date weekEndSta = cal.getTime();return getDayEndTime(weekEndSta);}/*** 获取今年是哪一年** @return Integer*/public static Integer getNowYear() {Date date = new Date();GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();gc.setTime(date);return gc.get(Calendar.YEAR);}/*** 获取本月是哪一月** @return Integer*/public static Integer getNowMonth() {Date date = new Date();GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();gc.setTime(date);return gc.get(Calendar.MONTH) + 1;}/*** 获取本月的开始时间** @return java.util.Date*/public static Date getBeginDayOfMonth() {Calendar calendar = Calendar.getInstance();calendar.set(getNowYear(), getNowMonth() - 1, 1);return getDayStartTime(calendar.getTime());}/*** 获取本月的结束时间** @return java.util.Date*/public static Date getEndDayOfMonth() {Calendar calendar = Calendar.getInstance();calendar.set(getNowYear(), getNowMonth() - 1, 1);int day = calendar.getActualMaximum(5);calendar.set(getNowYear(), getNowMonth() - 1, day);return getDayEndTime(calendar.getTime());}/*** 获取上月的开始时间** @return java.util.Date*/public static Date getBeginDayOfLastMonth() {Calendar calendar = Calendar.getInstance();calendar.set(getNowYear(), getNowMonth() - 2, 1);return getDayStartTime(calendar.getTime());}/*** 获取上月的结束时间** @return java.util.Date*/public static Date getEndDayOfLastMonth() {Calendar calendar = Calendar.getInstance();calendar.set(getNowYear(), getNowMonth() - 2, 1);int day = calendar.getActualMaximum(5);calendar.set(getNowYear(), getNowMonth() - 2, day);return getDayEndTime(calendar.getTime());}/*** 获取本年的开始时间** @return java.util.Date*/public static Date getBeginDayOfYear() {Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, getNowYear());cal.set(Calendar.MONTH, Calendar.JANUARY);cal.set(Calendar.DATE, 1);return getDayStartTime(cal.getTime());}/*** 获取本年的结束时间** @return java.util.Date*/public static Date getEndDayOfYear() {Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, getNowYear());cal.set(Calendar.MONTH, Calendar.DECEMBER);cal.set(Calendar.DATE, 31);return getDayEndTime(cal.getTime());}/*** 两个日期相减得到的天数** @param beginDate 开始时间* @param endDate   结束时间* @return Long*/public static Long getDiffDays(Date beginDate, Date endDate) {if (beginDate == null || endDate == null) {throw new IllegalArgumentException("getDiffDays param is null!");}return (endDate.getTime() - beginDate.getTime()) / (1000 * 60 * 60 * 24);}/*** 两个日期相减得到的毫秒数** @param beginDate 开始时间* @param endDate   结束时间* @return Long*/public static Long dateDiff(Date beginDate, Date endDate) {long date1ms = beginDate.getTime();long date2ms = endDate.getTime();return date2ms - date1ms;}/*** 获取两个日期中的最大日起** @param beginDate 开始时间* @param endDate   结束时间* @return java.util.Date*/public static Date max(Date beginDate, Date endDate) {if (beginDate == null) {return endDate;}if (endDate == null) {return beginDate;}//beginDate日期大于endDateif (beginDate.after(endDate)) {return beginDate;}return endDate;}/*** 获取两个日期中的最小日期** @param beginDate 开始时间* @param endDate   结束时间* @return java.util.Date*/public static Date min(Date beginDate, Date endDate) {if (beginDate == null) {return endDate;}if (endDate == null) {return beginDate;}if (beginDate.after(endDate)) {return endDate;}return beginDate;}/*** 获取某月该季度的第一个月** @param date 指定时间* @return java.util.Date*/public static Date getFirstSeasonDate(Date date) {final int[] quarters = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};Calendar cal = Calendar.getInstance();cal.setTime(date);int sean = quarters[cal.get(Calendar.MONTH)];cal.set(Calendar.MONTH, sean * 3 - 3);return cal.getTime();}/*** 返回某个日期下几天的日期** @param date* @param i* @return*/public static Date getNextDay(Date date, int i) {Calendar cal = new GregorianCalendar();cal.setTime(date);cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);return cal.getTime();}/*** 返回某个日期前几天的日期** @param date* @param i* @return*/public static Date getFrontDay(Date date, int i) {Calendar cal = new GregorianCalendar();cal.setTime(date);cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);return cal.getTime();}/*** 获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)** @param beginYear* @param beginMonth* @param k* @return*/@SuppressWarnings({"unchecked", "rawtypes"})public static List getTimeList(int beginYear, int beginMonth, int k) {List list = new ArrayList();Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1);int max = begincal.getActualMaximum(Calendar.DATE);for (int i = 1; i < max; i = i + k) {list.add(begincal.getTime());begincal.add(Calendar.DATE, k);}begincal = new GregorianCalendar(beginYear, beginMonth, max);list.add(begincal.getTime());return list;}/*** 获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)** @param beginYear* @param beginMonth* @param endYear* @param endMonth* @param k* @return*/@SuppressWarnings({"rawtypes", "unchecked"})public static List getTimeList(int beginYear, int beginMonth, int endYear, int endMonth, int k) {List list = new ArrayList();if (beginYear == endYear) {for (int j = beginMonth; j <= endMonth; j++) {list.add(getTimeList(beginYear, j, k));}} else {for (int j = beginMonth; j < 12; j++) {list.add(getTimeList(beginYear, j, k));}for (int i = beginYear + 1; i < endYear; i++) {for (int j = 0; j < 12; j++) {list.add(getTimeList(i, j, k));}}for (int j = 0; j <= endMonth; j++) {list.add(getTimeList(endYear, j, k));}}return list;}/**=================================    时间格式转换   ================================**//*** date类型进行格式化输出(返回类型:String)** @param date* @return*/public static String dateFormat(Date date) {return new SimpleDateFormat(FORMAT_DATETIME_HORIZONTAL).format(date);}public static String dateFormat(Date date, String pattern) {return new SimpleDateFormat(pattern).format(date);}/*** 将"2015-08-31 21:08:06"型字符串转化为Date** @param str* @return* @throws ParseException*/public static Date stringToDate(String str) throws ParseException {return new SimpleDateFormat(FORMAT_DATETIME_HORIZONTAL).parse(str);}public static Date stringToDate(String str, String pattern) throws ParseException {return new SimpleDateFormat(pattern).parse(str);}/*** 将long类型转化为Date** @param date* @return* @throws ParseException*/public static Date longToDate(Long date) {return new Date(date * 1000);}/*** 将Date类型转化为long** @param date* @return* @throws ParseException*/public static Long dateToLong(Date date) {return date.getTime();}/**=================================    其他常见日期操作方法   ================================**//*** 判断当前日期是否在[startDate, endDate]区间** @param startDate 开始日期* @param endDate   结束日期* @return* @author jqlin*/public static boolean isEffectiveDate(Date startDate, Date endDate) {if (startDate == null || endDate == null) {return false;}long currentTime = new Date().getTime();if (currentTime >= startDate.getTime() && currentTime <= endDate.getTime()) {return true;}return false;}/*** 得到二个日期间的间隔天数** @param secondString:后一个日期* @param firstString:前一个日期* @return*/public static String getTwoDay(String secondString, String firstString) {SimpleDateFormat myFormatter = new SimpleDateFormat(FORMAT_DATE_HORIZONTAL);long day;try {java.util.Date secondTime = myFormatter.parse(secondString);java.util.Date firstTime = myFormatter.parse(firstString);day = (secondTime.getTime() - firstTime.getTime()) / (24 * 60 * 60 * 1000);} catch (Exception e) {return "";}return day + "";}/*** 时间前推或后推分钟,其中JJ表示分钟.** @param StringTime:时间* @param minute:分钟(有正负之分)* @return*/public static String getPreTime(String stringTime, String minute) {SimpleDateFormat format = new SimpleDateFormat(FORMAT_DATETIME_HORIZONTAL);String mydate1;try {Date date1 = format.parse(stringTime);long time = (date1.getTime() / 1000) + Integer.parseInt(minute) * 60;date1.setTime(time * 1000);mydate1 = format.format(date1);} catch (Exception e) {return "";}return mydate1;}/*** 将短时间格式字符串转换为时间 yyyy-MM-dd** @param strDate* @return*/public static Date strToDate(String strDate) {return new SimpleDateFormat(FORMAT_DATE_HORIZONTAL).parse(strDate, new ParsePosition(0));}/*** 得到一个时间延后或前移几天的时间** @param nowdate:时间* @param delay:前移或后延的天数* @return*/public static String getNextDay(String nowdate, String delay) {try {SimpleDateFormat format = new SimpleDateFormat(FORMAT_DATETIME_HORIZONTAL);String mdate = "";Date d = strToDate(nowdate);long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;d.setTime(myTime * 1000);mdate = format.format(d);return mdate;} catch (Exception e) {return "";}}/*** 判断是否闰年** @param ddate* @return*/public static boolean isLeapYear(String ddate) {/*** 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年* 3.能被4整除同时能被100整除则不是闰年*/Date d = strToDate(ddate);GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();gc.setTime(d);int year = gc.get(Calendar.YEAR);if ((year % 400) == 0 || ((year % 4) == 0 && (year % 100) != 0)) {return true;}return false;}/*** 判断二个时间是否在同一个周** @param date1* @param date2* @return*/public static boolean isSameWeekDates(Date date1, Date date2) {Calendar cal1 = Calendar.getInstance();Calendar cal2 = Calendar.getInstance();cal1.setTime(date1);cal2.setTime(date2);int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)&&(0 == subYear || (1 == subYear && 11 == cal2.get(Calendar.MONTH)) || (-1 == subYear && 11 == cal1.get(Calendar.MONTH)))) {return true;}return false;}/*** 产生周序列,即得到当前时间所在的年度是第几周** @return*/public static String getSeqWeek() {Calendar c = Calendar.getInstance(Locale.CHINA);String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));if (week.length() == 1)week = "0" + week;String year = Integer.toString(c.get(Calendar.YEAR));return year + "年第" + week + "周";}/*** 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号** @param sdate:日期* @param num:星期几(星期天是一周的第一天)* @return*/public static String getWeek(String sdate, String num) {// 再转换为时间Date dd = strToDate(sdate);Calendar c = Calendar.getInstance();c.setTime(dd);if (num.equals("1")) // 返回星期一所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);else if (num.equals("2")) // 返回星期二所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);else if (num.equals("3")) // 返回星期三所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);else if (num.equals("4")) // 返回星期四所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);else if (num.equals("5")) // 返回星期五所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);else if (num.equals("6")) // 返回星期六所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);else if (num.equals("0")) // 返回星期日所在的日期c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);return new SimpleDateFormat(FORMAT_DATE_HORIZONTAL).format(c.getTime());}/*** 根据一个日期,返回是星期几的字符串** @param sdate* @return*/public static String getWeek(String sdate) {// 再转换为时间Date date = strToDate(sdate);Calendar c = Calendar.getInstance();c.setTime(date);return new SimpleDateFormat("EEEE").format(c.getTime());}/*** 根据一个日期,返回是星期几的字符串** @param sdate* @return*/public static String getWeekStr(String sdate) {String str = "";str = getWeek(sdate);if ("1".equals(str)) {str = "星期日";} else if ("2".equals(str)) {str = "星期一";} else if ("3".equals(str)) {str = "星期二";} else if ("4".equals(str)) {str = "星期三";} else if ("5".equals(str)) {str = "星期四";} else if ("6".equals(str)) {str = "星期五";} else if ("7".equals(str)) {str = "星期六";}return str;}/*** 两个时间之间的天数** @param date1* @param date2* @return*/public static long getDays(String date1, String date2) throws ParseException {if (date1 == null || date1.equals(""))return 0;if (date2 == null || date2.equals(""))return 0;// 转换为标准时间SimpleDateFormat myFormatter = new SimpleDateFormat(FORMAT_DATE_HORIZONTAL);Date date = myFormatter.parse(date1);Date mydate = myFormatter.parse(date2);return (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);}/*** 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写** @param format* @return*/public static String getCurrentFormatDate(String format) {return new SimpleDateFormat(format).format(new Date());}/*** N天后** @param current* @param days* @return java.util.date*/public static Date plusDate(Date current, int days) {Calendar calendar = new GregorianCalendar();calendar.setTime(current);calendar.add(Calendar.DATE, days);return calendar.getTime();}}

http://www.ppmy.cn/news/678554.html

相关文章

绘制七彩圆圈

#DrawSevenColorfulCircles.py import turtle colors [red,orange,yellow,green,blue,indigo,purple] for i in range(7): c colors[i] turtle.color(c,c) turtle.begin_fill() turtle.rt(360/7) turtle.circle(50) turtle.end_fill() turtle.done()

uniapp radio如何实现取消选中

uniapp 内置radio组件明确表示&#xff0c;不能取消选中&#xff0c;那如果要实现取消选中呢&#xff1f; 只要在外层加上label或者其他标签包裹&#xff0c;或者直接加入click事件然后加入事件控制radio的值改变即可 <label class"radio" click"changeAll&…

七彩光环制作

先看效果图&#xff1a; 第一步&#xff1a;新建设文件800*800,填充黑色。 第二步&#xff1a;执行滤镜->渲染->电影灯光 第三步&#xff0c;执行4次第二步&#xff0c;得到如下结果 第四步&#xff1a;执行滤镜扭曲->旋转扭曲 第五步&#xff1a;执行滤镱->扭曲-…

C语言开发七彩连珠游戏,七彩连珠游戏介绍 七彩连珠单机版运行及玩法介绍

七彩连珠是一款非常有趣的益智类消除小游戏&#xff0c;七彩连珠游戏有点像小时候玩五子棋的游戏&#xff0c;游戏中有七种颜色的球&#xff0c;您需要消掉相同颜色的小球&#xff0c;挑战最高分。本次小编给大家分享的是七彩连珠单机版&#xff0c;下载解压后运行即可。 七彩连…

绘制旋转七彩动画_VC源码_易语言源码

实现方法&#xff1a; 使用GDIPlus&#xff0c;FillPie方法&#xff0c;把各个色块当饼形图画出。 void CRotateAnimation::DrawPie(HDC hDC) {Gdiplus::Graphics* pGraphicsnew Gdiplus::Graphics(hDC);pGraphics->SetSmoothingMode(SmoothingModeHighQuality);Gdiplus::C…

七彩导航栏的制作(一)

简介:彩色的导航十分具有视觉美感,简约时尚,比较适合于童儿网站,女性网站等页面的导航。 功能:每一个栏目对应一个颜色,当鼠标移动到对应栏目时,该栏目突出显示,并同时改变下方横线的颜色。 实现: 1.导航栏用ul列表实现,横向显示通过 li{float:left} 实现; 2.列表项…

旋转霓虹圆圈

效果图 代码示例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-…