常用时间日期工具类
package org.source.dsmh.utils; import org.apache.commons.lang3.StringUtils; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 时间处理工具类 * <p> * DateUtils.java * * @author tangli */ public class DateUtils { // 默认日期格式 public static final String DATE_FORMAT_DEFAULT = "yyyy-MM-dd"; // 默认日期时间格式 public static final String DATETIME_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss"; public static Timestamp getNowDatetime() { Timestamp datetime = new Timestamp(System.currentTimeMillis()); return datetime; } public static String getTomorrowDate() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); Date time = cal.getTime(); return new SimpleDateFormat("yyyy-MM-dd").format(time); } public static String getYesterdayDate() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); Date time = cal.getTime(); return new SimpleDateFormat("yyyy-MM-dd").format(time); }
/****
* 获取昨天日期
* @param format 格式描述:例如:yyyy-MM-dd yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getYesterdayDate(String format) {
if(StringUtils.isBlank(format)) { format="yyyy-MM-dd"; } Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); Date time = cal.getTime(); return new SimpleDateFormat(format).format(time); } /** * 获取 “yyyy-MM-dd” 形式的当天日期的字符串 */ public static String getNowDate() { return DateUtils.formatTime(new Date(), DATE_FORMAT_DEFAULT); } /** * 获取 “yyyy-MM-dd HH:mm:ss” 形式的当天日期时间的字符串 */ public static String getNowtime() { return DateUtils.formatTime(new Date(), DATETIME_FORMAT_DEFAULT); } /** * 取两个日期中间相差的天数 * * @param date1 * @param date2 * @return */ public static int daySub(Date date1, Date date2) { long second = (date1.getTime() - date2.getTime()) / 1000; return (int) (second / 24 / 60 / 60); } /** * 取两个日期中间相差的分钟数 * * @param date1 * @param date2 * @return */ public static int minuteSub(Date date1, Date date2) { long second = (date1.getTime() - date2.getTime()) / 1000; return (int) (second / 60); } /** * 日期加天数 * * @param date * @param days * @return */ public static Date addDay(Date date, int days) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_MONTH, days); return c.getTime(); } /** * 日期加年数 * * @param date * @param years * @return */ public static Date addYear(Date date, int years) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.YEAR, years); return c.getTime(); } /** * 日期加小时数 * * @param date * @param hour * @return */ public static Date addHour(Date date, int hour) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.HOUR_OF_DAY, hour); return c.getTime(); } /** * 日期加分钟数 * * @param date * @param minute * @return */ public static Date addMinute(Date date, int minute) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MINUTE, minute); return c.getTime(); } /** * 日期加秒钟数 * * @param date * @param seconds * @return */ public static Date addSeconds(Date date, int seconds) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.SECOND, seconds); return c.getTime(); } /** * 以yyyy+separator+mm+separator+dd的格式显示年月日 * * @param time * @param separator 分隔符,如果为“年月日” 则用"yyyy年MM月dd日"格式 * @return */ public static String formatDay(Date time, String separator) { if (separator == null) { separator = "-"; } String formatStr = ""; if (separator.equals("年月日")) { formatStr = "yyyy年MM月dd日"; } else { formatStr = "yyyy" + separator + "MM" + separator + "dd"; } return formatTime(time, formatStr); } /** * 以MM月dd日格式显示日期 * * @param time * @return */ public static String formatShortDay(Date time, String separator) { if (separator == null) { separator = "-"; } String formatStr = ""; if (separator.equals("月日")) { formatStr = "MM月dd日"; } else { formatStr = "MM" + separator + "dd"; } return formatTime(time, formatStr); } public static String formatDateForLate(Date time) { if (time == null) { return ""; } int t = isSameDay(new Date(), time); if (t == 0) { return "今天"; } else if (t == 1) { return "昨天"; } else { return formatTime(time, "yyyy-MM-dd"); } } /** * 以yyyy-MM-dd HH:mm的格式转换日期 * * @param time java.util.Date * @return */ public static String formatMinute(Date time) { return formatTime(time, "yyyy-MM-dd HH:mm"); } /** * 以yyyy-MM-dd HH:mm:ss的格式转换日期 * * @param time * @return */ public static String formatSecond(Date time) { if (time == null) { return ""; } return formatTime(time, "yyyy-MM-dd HH:mm:ss"); } /** * 将时间转换成指定格式的字符串 * * @param time Date * @param format 格式描述:例如:yyyy-MM-dd yyyy-MM-dd HH:mm:ss * @return */ public static String formatTime(Date time, String format) { if (time != null) { SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE); return DATE_FORMAT.format(time); } else { return ""; } } /** * 将日期转换成指定格式的字符串 * * @param date * @return */ public static String formatDate(Date date) { if (date != null) { SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(DATE_FORMAT_DEFAULT, Locale.SIMPLIFIED_CHINESE); return DATE_FORMAT.format(date); } else { return ""; } } /** * 将秒计算出还有多少天、小时、分、秒,用于显示,例如:63s显示为:1分3秒 * * @param second * @return */ public static String showTimes(int second) { StringBuffer r = new StringBuffer(); int days = second / (3600 * 24); int hours = second % (3600 * 24) / 3600; int minutes = second % 3600 / 60; int s = second % 60; if (days > 0) { r.append(days).append("天"); } if (hours > 0) { r.append(hours).append("小时"); } if (minutes > 0) { r.append(minutes).append("分"); } if (s > 0) { r.append(s).append("秒"); } return r.toString(); } public static String showTimes(Date date) { return showTimes((int) ((System.currentTimeMillis() - date.getTime()) / 1000)); } /** * 比较两个日期是否为同一天 * * @param date1 * @param date2 * @return 0:是同一天 正数:date1>date2多少天 负数 date1<date2多少天 */ public static int isSameDay(Date date1, Date date2) { if (date1 == null || date2 == null) { return 0; } int r = 0; Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(date1); c2.setTime(date2); c1.set(Calendar.HOUR_OF_DAY, 0); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c1.set(Calendar.MILLISECOND, 0); c2.set(Calendar.HOUR_OF_DAY, 0); c2.set(Calendar.MINUTE, 0); c2.set(Calendar.SECOND, 0); c2.set(Calendar.MILLISECOND, 0); r = c1.compareTo(c2); if (r != 0) { r = (int) ((c1.getTimeInMillis() - c2.getTimeInMillis()) / 24 / 3600 / 1000); } return r; } /** * 截断日期到天 * * @param date * @return */ public static Timestamp truncDate(Date date) { Calendar c = Calendar.getInstance(); c.setTimeInMillis(date.getTime()); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return new Timestamp(c.getTimeInMillis()); } /** * 取当前日期 * * @return */ public static Timestamp getCurrentDay() { Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); Timestamp time = new Timestamp(c.getTimeInMillis()); return time; } /** * 取当月的第一天 * * @return */ public static Timestamp getCurrentMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); Timestamp time = new Timestamp(c.getTimeInMillis()); return time; } /** * 获取当前月份第一天 * * @return */ public static String getMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); Timestamp time = new Timestamp(c.getTimeInMillis()); return formatDate(time); } /** * 获取上个月第一天 * * @return */ public static String getYesFirMonth() { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); c.set(Calendar.DAY_OF_MONTH, 1); Timestamp time = new Timestamp(c.getTimeInMillis()); return formatDate(time); } /** * 获取上个月最后一天 * * @return */ public static String getYesLastMonth() { Calendar c = Calendar.getInstance(); int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); c.add(Calendar.MONTH, -1); c.set(Calendar.DAY_OF_MONTH, MaxDay); Timestamp time = new Timestamp(c.getTimeInMillis()); return formatDate(time); } /** * 从字符串中获取时间 * * @param s * @return */ public static Timestamp parseDate(String s) { return parseDate(s, "yyyy-MM-dd"); } public static long parseTimeLongFromStr(String s) { Timestamp time = parseDate(s, DATETIME_FORMAT_DEFAULT); return time.getTime(); } /** * 从字符串中获取时间 * * @param s * @param format * @return */ public static Timestamp parseDate(String s, String format) { if (s == null || s.trim().length() == 0) { return null; } try { SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE); return new Timestamp(dateFormat.parse(s).getTime()); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从字符串中获取时间 * * @param s * @param format * @return */ public static String parseDateStr(String s, String format) { if (s == null || s.trim().length() == 0) { return null; } try { SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE); return dateFormat.parse(s).getTime() + ""; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从字符串生成Date对象 * * @param string * @param format * @return */ public static Date parseStrToDate(String string, String format) { if (format == null) { format = "yyyy-MM-dd"; } Date date = null; SimpleDateFormat dateformat = new SimpleDateFormat(format); try { date = dateformat.parse(string); } catch (Exception e) { e.printStackTrace(); } return date; } /** * date转成string * @param date * @param format * @return */ public static String getSrtingToDay(Date date, String format) { String result = null; if (date != null) { SimpleDateFormat formats = new SimpleDateFormat(format); result = formats.format(date); } return result; } /** * 计算年龄 * * @param birthYear * @return */ public static int calAge(String birthYear) { return calAge(birthYear, null); } /** * 计算年龄 * * @param birth * @param cardNo * @return */ public static int calAge(Date birth, String cardNo) { if (birth == null) { if (StringUtils.isEmpty(cardNo)) { return 0; } else { IdcardInfoExtractor idcardInfo = new IdcardInfoExtractor(cardNo); return idcardInfo.getAge(); } } Calendar cald = Calendar.getInstance(); cald.setTime(new Date(birth.getTime())); String year = "" + cald.get(Calendar.YEAR); return calAge(year, null); } /** * 计算年龄 * * @param birthYear * @param currentDay * @return */ public static int calAge(String birthYear, Date currentDay) { Calendar n = Calendar.getInstance(); if (currentDay == null) { n.setTime(getNowDatetime()); } else { n.setTime(currentDay); } return n.get(Calendar.YEAR) - Integer.parseInt(birthYear); } /** * 以yyyy年MM月dd日的格式转换日期 * * @param time * @return */ public static String formatDateCN(Date time) { return formatTime(time, "yyyy年MM月dd日"); } /** * 以yyyy/MM/dd的格式转换日期 * * @param time * @return */ public static String formatDateCN1(Date time) { return formatTime(time, "yyyy/MM/dd"); } /** * 以yyyy-MM-dd的格式转换日期 * * @param time * @return */ public static String formatDateEN(Date time) { return formatTime(time, "yyyy-MM-dd"); } public static Date getBeginDate(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return c.getTime(); } public static String getBeginDatestr(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return formatSecond(c.getTime()); } public static String getEndDatestr(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR_OF_DAY, 23); c.set(Calendar.MINUTE, 59); c.set(Calendar.SECOND, 59); return formatSecond(c.getTime()); } public static Date getEndDate(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR_OF_DAY, 23); c.set(Calendar.MINUTE, 59); c.set(Calendar.SECOND, 59); return c.getTime(); } /** * 获取当前日期是星期几<br> * * @param dt * @return 当前日期是星期几 */ public static String getWeekOfDate(Date dt) { String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance(); cal.setTime(dt); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) { w = 0; } return weekDays[w]; } /** * 获取周一的日期< * * @param date * @return */ public static Date getMonday(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return calendar.getTime(); } /** * 取得当前日期是多少周 * * @param date * @return */ public static int getWeekOfYear(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setMinimalDaysInFirstWeek(7); c.setTime(date); return c.get(Calendar.WEEK_OF_YEAR); } /** * 取得当前月份第几周 * * @param date * @return */ public static int getWeekOfMon(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.WEEK_OF_MONTH); } /** * 取得当前月份 * * @param date * @return */ public static int getfMon(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.MONTH) + 1; } /** * 得到某一年周的总数 * * @param year * @return */ public static int getMaxWeekNumOfYear(int year) { Calendar c = new GregorianCalendar(); c.set(year, Calendar.DECEMBER, 31, 23, 59, 59); return getWeekOfYear(c.getTime()); } /** * 得到某年某周的第一天 * * @param year * @param week * @return */ public static String getFirstDayOfWeek(int year, int week) { 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 formatDateCN1(getMonday(cal.getTime())); } /** * 得到某年某周的最后一天 * * @param year * @param week * @return */ public static String getLastDayOfWeek(int year, int week) { 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 formatDateCN1(getLastDayOfWeek(cal.getTime())); } /** * 取得指定日期所在周的最后一天 * * @param date * @return */ public static Date getLastDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday return c.getTime(); } /** * 获取年份 * * @param date * @return */ public static int getYear(Date date) { Calendar c = new GregorianCalendar(); return c.get(Calendar.YEAR); } /** * 获取一年的周的开始日期和截至日期 * * @param year * @return weekNum 截至目前的周数 */ public static List<String> getYearforWeek(Integer year, Integer weekNum) { if (year == null) { year = DateUtils.getYear(new Date()); } if (weekNum == null) { weekNum = DateUtils.getMaxWeekNumOfYear(year); } List<String> weekList = new ArrayList<String>(); for (int i = 0; i < weekNum; i++) { StringBuffer s = new StringBuffer(); s.append(DateUtils.getFirstDayOfWeek(year, i)); s.append("-"); s.append(DateUtils.getLastDayOfWeek(year, i)); // System.out.println(s.toString()); weekList.add(s.toString()); } return weekList; } /** * 获取某年某周的开始日期和截至日期 * * @param year * @return */ public static String getCueWeekDateStr(Integer year, Integer week) { StringBuffer s = new StringBuffer(); s.append(DateUtils.getFirstDayOfWeek(year, week)); s.append("-"); s.append(DateUtils.getLastDayOfWeek(year, week)); // System.out.println(s.toString()); return s.toString(); } /** * 获取当前时间与指定时间的时间差(秒数) 時間格式:"yyyy-MM-dd HH:mm:ss" * 即 (myTime+diffTime) - curTime * * @throws ParseException */ public static long diffDate(String mytime, int diffTime) throws ParseException { //倒计时时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long order_time = format.parse(mytime).getTime() + diffTime; Date now = new Date(); long cur_time = now.getTime(); return (order_time - cur_time) / 1000; } /** * 将时间戳转换为时间 * * @param timeStamp 时间戳格式的时间字符串 * @return */ public static String stampToDateStr(String timeStamp, String format) { if (StringUtils.isEmpty(format)) { format = DATETIME_FORMAT_DEFAULT; } String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); long lt = new Long(timeStamp); Date date = new Date(lt); res = simpleDateFormat.format(date); return res; } /** * 将字符串转换为指定时间格式字符串 * * @param timeStr 时间字符串 2020-10-10 * @param fromFormat 时间字符串的日期格式 如: yyyy-MM-dd * @param toFormat 将要转成的日期格式 如: yyyy-MM-dd HH:mm:ss * @return */ public static String strToDateStr(String timeStr, String fromFormat, String toFormat) { if (StringUtils.isEmpty(fromFormat)) { fromFormat = DATETIME_FORMAT_DEFAULT; } if (StringUtils.isEmpty(toFormat)) { toFormat = DATETIME_FORMAT_DEFAULT; } String timestamp = parseDateStr(timeStr, fromFormat); return stampToDateStr(timestamp, toFormat); } /** * 将字符串转换为时间格式字符串, 截取多余的长度 * * @param timeStr 时间字符串 2020-10-10 05:00:00 * @return */ public static String strToDateStr19(String timeStr) { if (StringUtils.isEmpty(timeStr)) { return timeStr; } if (timeStr.length() <= 19) { return timeStr; } return timeStr.substring(0, 19); } /** * 获取当前时间到凌晨的秒数 * @return */ public static Long getSecondsNextEarlyMorning() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000; }
/****
* 将字符串时间转换为datetime
* @param timeStr
* @param fromFormat
* @return
*/
public static DateTime getDateTime(String timeStr, String fromFormat){
DateTimeFormatter formatter = DateTimeFormat.forPattern(fromFormat);
DateTime dt = formatter.parseDateTime(timeStr);
return dt;
}
public static void main(String[] args) {
System.out.println(getSecondsNextEarlyMorning());
}
}
好记性不如烂笔头
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· Java线程池详解:高效并发编程的核心利器
· C#.Net筑基-优雅LINQ的查询艺术
· Cursor生成UI,加一步封神
· 博客园众包平台:诚征3D影像景深延拓实时处理方案(预算8-15万)
· 为什么说方法的参数最好不要超过4个?
· 一个基于 .NET 8 开源免费、高性能、低占用的博客系统