您当前的位置: 首页 >  wespten Java

Java日期工具类

wespten 发布时间:2020-05-07 17:58:09 ,浏览量:3

日期工具类

DateUtil

package com.huawei.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;




/**
 * Description: 
* 日期工具类 * @author * @date */ public class DateUtil { public static void main(String[] args) { String str1 = "07:00"; String str2 ="07:00"; System.out.println("==="+str1.compareTo(str2)); // int o =compare_time("23:30", "01:00"); // System.out.println("==="+o); } /** * 将Date类型转换为字符串 * * @param date 日期类型 * @return 日期字符串 */ public static String format(Date date) { return format(date, "yyyy-MM-dd HH:mm:ss"); } /** * 将Date类型转换为字符串 * * @param date 日期类型 * @param pattern 字符串格式 * @return 日期字符串 */ public static String format(Date date, String pattern) { if (date == null) { return "null"; } if (pattern == null || pattern.equals("") || pattern.equals("null")) { pattern = "yyyy-MM-dd HH:mm:ss"; } return new SimpleDateFormat(pattern).format(date); } public static Date format2(Date date, String pattern) { if (pattern == null || pattern.equals("") || pattern.equals("null")) { pattern = "yyyy-MM-dd HH:mm:ss"; } String d = fmtDateToStr(date, pattern); return fmtStrToDate(d, pattern); } /** * 将字符串转换为Date类型 * * @param date 字符串类型 * @return 日期类型 */ public static Date format(String date) { return format(date, null); } /** * 将字符串转换为Date类型 * * @param date 字符串类型 * @param pattern 格式 * @return 日期类型 */ public static Date format(String date, String pattern) { if (pattern == null || pattern.equals("") || pattern.equals("null")) { pattern = "yyyy-MM-dd HH:mm:ss"; } if (date == null || date.equals("") || date.equals("null")) { pattern = "mm:ss"; } Date d = null; try { d = new SimpleDateFormat(pattern).parse(date); } catch (ParseException pe) { pe.printStackTrace(); } return d; } public static String splitDate(String myDate) { myDate = myDate.substring(0, myDate.length() - 2); return myDate; } /** * 将字符串转化为DATE * * @param dtFormat 格式yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd * @param def 如果格式化失败返回null * @return */ /** * 将字符串转化为DATE * * @param dtFormat 格式yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd或 yyyy-M-dd或 yyyy-M-d或 * yyyy-MM-d或 yyyy-M-dd * @param def 如果格式化失败返回null * @author * @return */ public static Date fmtStrToDate(String dtFormat) { if (dtFormat == null || dtFormat.trim().equals("")) { return null; } try { if (dtFormat.length() == 9 || dtFormat.length() == 8) { String[] dateStr = dtFormat.split("-"); dtFormat = dateStr[0] + (dateStr[1].length() == 1 ? "-0" : "-") + dateStr[1] + (dateStr[2].length() == 1 ? "-0" : "-") + dateStr[2]; } if (dtFormat.length() != 10 & dtFormat.length() != 19) return null; if (dtFormat.length() == 10) dtFormat = dtFormat + " 00:00:00"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.parse(dtFormat); } catch (Exception e) { e.printStackTrace(); return null; } } /** * * Description:格式化日期,如果格式化失败返回def * * @param dtFormat * @param def * @return * @author * @since:2008-2-15 下午05:01:37 */ public static Date fmtStrToDate(String dtFormat, Date def) { Date d = fmtStrToDate(dtFormat); if (d == null) return def; return d; } /** * 返回当日短日期型 * * @return * @author * @since:2008-2-15 下午05:03:13 */ public static Date getToDay() { return toShortDate(new Date()); } /** * 返回当日短日期型 * * @return * @author * @since:2008-2-15 下午05:03:13 */ public static Date getToDayL() { return toLongDate(new Date()); } /** * * Description:格式化日期,String字符串转化为Date * * @param date * @param dtFormat * 例如:yyyy-MM-dd HH:mm:ss yyyyMMdd * @return * @author * @since:2007-7-10 上午11:24:00 */ public static String fmtDateToStr(Date date, String dtFormat) { if (date == null) return ""; try { SimpleDateFormat dateFormat = new SimpleDateFormat(dtFormat); return dateFormat.format(date); } catch (Exception e) { e.printStackTrace(); return ""; } } /** * Description:按指定格式 格式化日期 * * @param date * @param dtFormat * @return * @author * @since:2007-12-10 上午11:25:07 */ public static Date fmtStrToDate(String date, String dtFormat) { try { SimpleDateFormat dateFormat = new SimpleDateFormat(dtFormat); return dateFormat.parse(date); } catch (Exception e) { e.printStackTrace(); return null; } } public static String fmtDateToYMDHM(Date date) { return fmtDateToStr(date, "yyyy-MM-dd HH:mm"); } public static String fmtDateToYMD(Date date) { return fmtDateToStr(date, "yyyy-MM-dd"); } public static String fmtDateToYM(Date date) { return fmtDateToStr(date, "yyyy-MM"); } public static String fmtDateToM(Date date) { return fmtDateToStr(date, "MM"); } /** * * Description:只保留日期中的年月日 * * @param date * @return * @author * @since:2007-12-10 上午11:25:50 */ public static Date toShortDate(Date date) { String strD = fmtDateToStr(date, "yyyy-MM-dd"); return fmtStrToDate(strD); } /** * * Description:只保留日期中的年月日 时分秒 * * @param date * @return * @author * @since:2007-12-10 上午11:25:50 */ public static Date toLongDate(Date date) { String strD = fmtDateToStr(date, "yyyy-MM-dd HH:mm:ss"); return fmtStrToDate(strD); } /** * * Description:只保留日期中的年月日 * * @param date格式要求yyyy * -MM-dd…………………… * @return * @author * @since:2007-12-10 上午11:26:12 */ public static Date toShortDate(String date) { if (date != null && date.length() >= 10) { return fmtStrToDate(date.substring(0, 10)); } else return fmtStrToDate(date); } /** * 求对日 * * @param countMonth * :月份的个数(几个月) * @param flag * :true 求前countMonth个月的对日:false 求下countMonth个月的对日 * @return */ public static Date getCounterglow(int countMonth, boolean before) { Calendar ca = Calendar.getInstance(); return getCounterglow(ca.getTime(), before ? -countMonth : countMonth); } /** * * Description: 求对日 加月用+ 减月用- * * @param date * @param countMonth * @return * @since:2007-12-13 下午03:16:47 */ public static Date getCounterglow(Date date, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(date); ca.add(Calendar.MONTH, num); return ca.getTime(); } /** * * Description:加一天 * * @param date * @return * @author * @since:2007-12-13 下午02:57:38 */ public static Date addDay(Date date) { Calendar cd = Calendar.getInstance(); cd.setTime(date); cd.add(Calendar.DAY_OF_YEAR, 1); return cd.getTime(); } /** * * Description:判断一个日期是否为工作日(非周六周日) * * @param date * @return * @author * @since:2007-12-13 下午03:01:35 */ public static boolean isWorkDay(Date date) { Calendar cd = Calendar.getInstance(); cd.setTime(date); int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) return false; return true; } /** * * Description:取一个月的最后一天 * * @param date1 * @return * @author * @since:2007-12-13 下午03:28:21 */ public static Date getLastDayOfMonth(Date date1) { Calendar date = Calendar.getInstance(); date.setTime(date1); date.set(Calendar.DAY_OF_MONTH, 1); date.add(Calendar.MONTH, 1); date.add(Calendar.DAY_OF_YEAR, -1); return toShortDate(date.getTime()); } /** * 求开始截至日期之间的天数差. 不准确不准确不准确不准确不准确不准确不准确不准确 * * @param d1 * 开始日期 * @param d2 * 截至日期 * @return 返回相差天数 */ public static int getDaysInterval(Date d1, Date d2) { if (d1 == null || d2 == null) return 0; Date[] d = new Date[2]; d[0] = d1; d[1] = d2; Calendar[] cal = new Calendar[2]; for (int i = 0; i < cal.length; i++) { cal[i] = Calendar.getInstance(); cal[i].setTime(d[i]); cal[i].set(Calendar.HOUR_OF_DAY, 0); cal[i].set(Calendar.MINUTE, 0); cal[i].set(Calendar.SECOND, 0); } long m = cal[0].getTime().getTime(); long n = cal[1].getTime().getTime(); int ret = (int) Math.abs((m - n) / 1000 / 3600 / 24); return ret; } /** * 求开始截至日期之间的天数差.准确 * * @param d1 * 开始日期 * @param d2 * 截至日期 * @return 返回相差天数 */ public static int getDaysIntervalStr(String dateStart, String dateStop) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1 = null; Date d2 = null; int diffDaysInt = 0; try { d1 = format.parse(dateStart); d2 = format.parse(dateStop); // 毫秒ms long diff = d2.getTime() - d1.getTime(); // long diffSeconds = diff / 1000 % 60; // long diffMinutes = diff / (60 * 1000) % 60; // long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000); diffDaysInt = new Long(diffDays).intValue(); } catch (Exception e) { e.printStackTrace(); } return diffDaysInt; } public static String getDayOfWeek(Date date) { Calendar cl = Calendar.getInstance(); cl.setTime(date); return "周" + toChNumber(cl.get(Calendar.DAY_OF_WEEK) - 1); } /** * 将数字转为中文。 "0123456789"->"〇一二三四五六七八九" * * @param num * 长度为1,'0'-'9'的字符串 * @return */ private static String toChNumber(int num) { final String str = "〇一二三四五六七八九"; return str.substring(num, num + 1); } /** * * Description:指定日期加或减分钟 * * @param date1日期 * @param days天数 * @return * @author * @since:2007-12-17 下午03:47:12 */ public static Date addMINUTE(Date date1, int minute) { Calendar date = Calendar.getInstance(); date.setTime(date1); date.add(Calendar.MINUTE, minute); return date.getTime(); } /** * * Description:指定日期加或减days天 * * @param date1日期 * @param days天数 * @return * @author * @since:2007-12-17 下午03:47:12 */ public static Date addDay(Date date1, int days) { Calendar date = Calendar.getInstance(); date.setTime(date1); date.add(Calendar.DAY_OF_YEAR, days); return date.getTime(); } /** * * Description:指定日期加或减months月 * * @param date1 * @param months * @return * @author * @since:2008-3-5 下午05:17:26 */ public static Date addMonth(Date date1, int months) { Calendar date = Calendar.getInstance(); date.setTime(date1); date.add(Calendar.MONTH, months); return date.getTime(); } /** * * Description:指定日期加或减years年 * * @param date1 * @param years * @return */ public static Date addYear(Date date1, int years) { Calendar date = Calendar.getInstance(); date.setTime(date1); date.add(Calendar.YEAR, years); return date.getTime(); } /** * 指定期间的开始日期 * * @param date * 指定日期 * @param type * 期间类型 * @param diff * 与指定日期的范围 * @return */ public static Date getPeriodStart(Calendar date, int type, int diff) { date.add(type, diff * (-1)); return date.getTime(); } /** * 指定期间的开始日期 * * @param date * 指定日期 * @param type * 期间类型 * @param diff * 与指定日期的范围 * @return */ public static Date getPeriodStart(Date date, int type, int diff) { return getPeriodStart(dateToCalendar(date), type, diff); } /** * 指定期间的结束日期 * * @param date * 指定日期 * @param type * 期间类型 * @param diff * 与指定日期的范围 * @return */ public static Date getPeriodEnd(Calendar date, int type, int diff) { date.add(type, diff); return date.getTime(); } /** * 指定期间的结束日期 * * @param date * 指定日期 * @param type * 期间类型 * @param diff * 与指定日期的范围 * @return */ public static Date getPeriodEnd(Date date, int type, int diff) { return getPeriodEnd(dateToCalendar(date), type, diff); } /** * 指定日期所在星期的第一天 * * @param date * @return */ public static Date getWeekStart(Date date) { Calendar cdate = dateToCalendar(date); cdate.set(Calendar.DAY_OF_WEEK, 2); return cdate.getTime(); } /** * 将java.util.Date类型转换成java.util.Calendar类型 * * @param date * @return */ public static Calendar dateToCalendar(Date date) { Calendar cdate = Calendar.getInstance(); cdate.setTime(date); return cdate; } /** * 指定日期所在月的第一天 * * @param date * @return */ public static Date getMonthStart(Date date) { Calendar cdate = dateToCalendar(date); cdate.set(Calendar.DAY_OF_MONTH, 1); return toShortDate(cdate.getTime()); } /** * 指定日期所在上月的第一天 * * @param date * @return */ public static Date getLastMonthStart(Date date) { Calendar cdate = dateToCalendar(date); cdate.set(Calendar.DAY_OF_MONTH, 1); cdate.add(Calendar.MONTH, -1); return toShortDate(cdate.getTime()); } /** * 指定日期所在旬的第一天 * * @param date * @return */ public static Date getTenDaysStart(Date date) { Calendar cdate = dateToCalendar(date); int day = cdate.get(Calendar.DAY_OF_MONTH) / 10 * 10 + 1; if (cdate.get(Calendar.DAY_OF_MONTH) % 10 == 0 || day == 31) day = day - 10; cdate.set(Calendar.DAY_OF_MONTH, day); return cdate.getTime(); } /** * 指定日期所在旬的最后一天 * * @param date * @return */ public static Date getTenDaysEnd(Date date) { Calendar cdate = dateToCalendar(date); if (cdate.get(Calendar.DAY_OF_MONTH) / 10 == 2 && cdate.get(Calendar.DAY_OF_MONTH) != 20) return getLastDayOfMonth(date); else return addDay(getTenDaysStart(addDay(date, 10)), -1); } /** * 指定日期所在年的第一天 * * @param date * @return */ public static Date getYearStart(Date date) { Calendar cdate = dateToCalendar(date); cdate.set(Calendar.DAY_OF_YEAR, 1); return cdate.getTime(); } /** * 指定日期所在季度的第一天 * * @param date * @return */ public static Date getQuarterStart(Date date) { Calendar cdate = dateToCalendar(date); int month = (cdate.get(Calendar.MONTH) / 3) * 3; cdate.set(Calendar.MONTH, month); return getMonthStart(cdate.getTime()); } /** * 指定日期返回带中文的字符串(目前为年月日类型,之后补充) * * @param date * @param format * @return */ public static String dateToStringByChinese(String format, Date date) { String dateString = fmtDateToStr(date, format); String[] dateStringArray = dateString.split("-"); if ("yyyy-MM-dd".equals(format)) { dateString = dateStringArray[0] + "年" + dateStringArray[1] + "月" + dateStringArray[2] + "日"; } else if ("yyyy-MM".equals(format)) { dateString = dateStringArray[0] + "年" + dateStringArray[1] + "月"; } return dateString; } public static Date getLastDayOfYear(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy"); String years = dateFormat.format(date); years += "-12-31"; Date returnDate = fmtStrToDate(years); return toShortDate(returnDate); } /** * 计算两个日期之间相差的月数 * * @param date1 * @param date2 * @return */ public static int getMonths(Date date1, Date date2) { int iMonth = 0; int flag = 0; try { Calendar objCalendarDate1 = Calendar.getInstance(); objCalendarDate1.setTime(date1); Calendar objCalendarDate2 = Calendar.getInstance(); objCalendarDate2.setTime(date2); if (objCalendarDate2.equals(objCalendarDate1)) return 0; if (objCalendarDate1.after(objCalendarDate2)) { Calendar temp = objCalendarDate1; objCalendarDate1 = objCalendarDate2; objCalendarDate2 = temp; } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1.get(Calendar.DAY_OF_MONTH)) flag = 1; if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1.get(Calendar.YEAR)) iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1.get(Calendar.YEAR)) * 12 + objCalendarDate2.get(Calendar.MONTH) - flag) - objCalendarDate1.get(Calendar.MONTH); else iMonth = objCalendarDate2.get(Calendar.MONTH) - objCalendarDate1.get(Calendar.MONTH) - flag; } catch (Exception e) { e.printStackTrace(); } return iMonth; } /** * 指定日期上一个旬的第一天 */ public static Date getLastTenStartDate(Date date) { Date returnDate = DateUtil.toShortDate(date); returnDate = DateUtil.getTenDaysStart(date); returnDate = DateUtil.addDay(returnDate, -1); returnDate = DateUtil.getTenDaysStart(returnDate); return DateUtil.toShortDate(returnDate); } /** * 指定日期上一个旬的最后一天 */ public static Date getLastTenEndDate(Date date) { Date returnDate = DateUtil.toShortDate(date); returnDate = DateUtil.getTenDaysStart(date); returnDate = DateUtil.addDay(returnDate, -1); return DateUtil.toShortDate(returnDate); } /** * 指定日期上个月第一天 */ public static Date getLastMonthStartDate(Date date) { Date returnDate = DateUtil.toShortDate(date); returnDate = DateUtil.getLastMonthStart(date); return DateUtil.toShortDate(returnDate); } /** * 指定日期上个月最后一天 */ public static Date getLastMonthEndDate(Date date) { Date returnDate = DateUtil.toShortDate(date); returnDate = DateUtil.getMonthStart(date); returnDate = DateUtil.addDay(returnDate, -1); return DateUtil.toShortDate(returnDate); } public static Date getAddDate(int minute) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, minute); return calendar.getTime(); } /** * 获取当前日期是星期几
* * @param dt * @return 当前日期是星期几 */ public static int 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 w; } // 计算两个时间段中间的日期的方法 public static List findDates(Date date1, Date date2) throws ParseException { List list = new ArrayList(); date1 = format2(date1, "yyyy-MM-dd"); date2 = format2(date2, "yyyy-MM-dd"); int s = (int) ((date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000)); System.out.println(s); if (s + 1 > 0) { for (int i = 0; i dt2.getTime()) { System.out.println("dt1 在dt2前"); return 1; } else if (dt1.getTime() < dt2.getTime()) { System.out.println("dt1在dt2后"); return -1; } else { return 0; } } catch (Exception exception) { exception.printStackTrace(); } return 0; } public static String getMinDate(List dateL) { String result = ""; Collections.sort(dateL, new Comparator() { public int compare(String o1, String o2) { return o1.compareTo(o2); } }); result = dateL.get(0); return result; } /** * 返回一个日期的年份 * 当传入的参数date为null时,返回-1 * @param date * @return */ public static int getYearOfDate(Date date) { if(date == null){ return -1; } Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); } }

 

关注
打赏
查看更多评论

wespten

暂无认证

  • 3浏览

    0关注

    821博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录