日期工具类
package com.rynk.commons.util; import com.rynk.commons.exception.resolver.exception.ParameterErrorException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 时间格式化工具 * * @author ZHANGYUKUNUP * */ public class DateUtils { private static final List<String> formarts = new ArrayList<>(4); static { formarts.add("yyyy-MM"); formarts.add("yyyy-MM-dd"); formarts.add("yyyy-MM-dd HH:mm"); formarts.add("yyyy-MM-dd HH:mm:ss"); formarts.add("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); } /** * 格式化日期 * * @param dateStr String 字符型日期 * @param format String 格式 * @return Date 日期 */ private static Date parseDate(String dateStr, String format) { Date date = null; try { DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateStr); } catch (Exception e) { e.printStackTrace(); throw new ParameterErrorException("日期解析错误"); } return date; } /** * 把字符串类型的时间转换成 Date对象 支持的 格式如下 * 1 yyyy-MM * 2 yyyy-MM-dd * 3 yyyy-MM-dd HH:mm * 4 yyyy-MM-dd HH:mm:ss * 5 字数字符串的时间毫秒数 * 6 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' * @param dateStr * @return */ public static Date parse(String dateStr) { if (dateStr == null) { return null; } String value = dateStr.trim(); if ("".equals(value)) { return null; } if (value.matches("^\\d{4}-\\d{1,2}$")) { return parseDate(value, formarts.get(0)); } else if (value.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { return parseDate(value, formarts.get(1)); } else if (value.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { return parseDate(value, formarts.get(2)); } else if (value.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { return parseDate(value, formarts.get(3)); } else if (value.matches("^\\d{1,19}$")) { return new Date(Long.parseLong(value)); } else if (value.matches("^\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}.\\d{1,3}Z$")) { return parseDate(value, formarts.get(4)); } else { throw new ParameterErrorException("不支持的时间格式"); } } /** * 格式化 时间(默认按照最常见的时间格式化输出) * * @param date * @return */ public static String format(Date date) { return format(date, 3); } /** * 格式化时间 * * @param date * @param i 用第几种 格式化方式 * @return */ public static String format(Date date, int i) { if (date == null) { return null; } if (i > formarts.size() - 1) { return null; } DateFormat dateFormat = new SimpleDateFormat(formarts.get(i)); return dateFormat.format(date); } /** * 取 指定日期当天第一秒的时间(00:00:00) * * @param date * @return */ public static Date getBeginTime(Date date) { return parse(format(date, 1) + " 00:00:00"); } /** * 取指定日期当天最后最后一秒的时间(23:59:59) * * @param date * @return */ public static Date getEndTime(Date date) { return parse(format(date, 1) + " 23:59:59"); } /** * 取 后面 几天的 当前时间 * @param date * @param dayNum 天数 * @return */ public static Date nextDayNow(Date date, int dayNum) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add( Calendar.DAY_OF_MONTH , dayNum ); return calendar.getTime(); } /** * 得到年月日 * 下标 的0,1,2 对应年月日 * @param date * @return */ public static int[] getYMD(Date date) { String[] ymd = format(date, 1).split("-"); return new int[]{ Integer.valueOf( ymd[0] ),Integer.valueOf( ymd[1] ) ,Integer.valueOf( ymd[2] ) }; } /** * 上月开始的时间 */ public static Date lastMonthBeginTime() throws ParseException { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01 00:00:00"); return org.apache.commons.lang3.time.DateUtils.parseDate(sdf2.format(c.getTime()), Locale.CHINA, "yyyy-MM-dd HH:mm:ss"); } /** * 本月开始的时间 */ public static Date monthBeginTime() throws ParseException { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01 00:00:00"); return org.apache.commons.lang3.time.DateUtils.parseDate(sdf2.format(c.getTime()), Locale.CHINA, "yyyy-MM-dd HH:mm:ss"); } /** * 得到指定月份的最后一天 * @param year * @param month * @return */ public static Date getLastDayOfMonth(int year,int month){ Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR,year); //设置月份 cal.set(Calendar.MONTH, month-1); //获取某月最大天数 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, lastDay); return cal.getTime(); } /** * 得到指定月份的第一天 * @param year * @param month * @return */ public static Date getFirstDayOfMonth(int year,int month){ Calendar cal = Calendar.getInstance(); //设置年份 cal.set(Calendar.YEAR,year); //设置月份 cal.set(Calendar.MONTH, month-1); //获取某月最大天数 //设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } }
能耍的时候就一定要耍,不能耍的时候一定要学。
天道酬勤,贵在坚持
posted on 2020-01-07 16:23 zhangyukun 阅读(290) 评论(0) 编辑 收藏 举报