Web 开发工具类(5) | DateUtils
来源:互联网 发布:linux lvm配置文件 编辑:程序博客网 时间:2024/05/17 09:40
日期工具类
import java.text.ParseException;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.lang3.StringUtils;/** * 日期工具类 * * @author Evan * */public class DateUtils { private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(); private static final Object object = new Object(); /** * 获取SimpleDateFormat * * @param pattern * 日期格式 * @return SimpleDateFormat对象 * @throws RuntimeException * 异常:非法日期格式 */ private static SimpleDateFormat getDateFormat(String pattern) throws RuntimeException { SimpleDateFormat dateFormat = threadLocal.get(); if (dateFormat == null) { synchronized (object) { if (dateFormat == null) { dateFormat = new SimpleDateFormat(pattern); dateFormat.setLenient(false); threadLocal.set(dateFormat); } } } dateFormat.applyPattern(pattern); return dateFormat; } /**计算日期 * @param date 限制输入格式都是:yyyy-MM-dd HH:mm:ss * @param interval 间隔毫秒数,可正可负 * @param tarPattern 目标的输出格式,默认是:yyyy-MM-dd HH:mm:ss * @return * * @author luozhixiao */ public static String dateSub(String date, Long interval, String tarPattern){ String tarDate = null; if(StringUtils.isNotBlank( tarDate ) && interval != null){ try { Long dtLong = getDateFormat("yyyy-MM-dd HH:mm:ss").parse( date ).getTime(); Date rs = new Date(dtLong+interval); tarDate = getDateFormat(tarPattern!=null?tarPattern:"yyyy-MM-dd HH:mm:ss").format( rs ); } catch (ParseException | RuntimeException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return tarDate; } /**日期格式转化 * @param date 日期 * @param originFormat 日期的原来格式 * @param targetFormat 目标格式 * @return * * @author luozhixiao */ public static String transDateFormat(String date , String originFormat , String targetFormat){ String tarDateStr = null; if(StringUtils.isNotBlank( date )&&StringUtils.isNotBlank( originFormat )&&StringUtils.isNotBlank( targetFormat )){ try { SimpleDateFormat dateFm = getDateFormat(originFormat); Date dd = dateFm.parse( date ); SimpleDateFormat dateFm2 = getDateFormat(targetFormat); tarDateStr = dateFm2.format( dd ); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return tarDateStr; } /** * 获取日期中的某数值。如获取月份 * * @param date * 日期 * @param dateType * 日期格式 * @return 数值 */ private static int getInteger(Date date, int dateType) { int num = 0; Calendar calendar = Calendar.getInstance(); if (date != null) { calendar.setTime(date); num = calendar.get(dateType); } return num; } /** * 增加日期中某类型的某数值。如增加日期 * * @param date * 日期字符串 * @param dateType * 类型 * @param amount * 数值 * @return 计算后日期字符串 */ public static String addInteger(String date, int dateType, int amount) { String dateString = null; DateStyle dateStyle = getDateStyle(date); if (dateStyle != null) { Date myDate = StringToDate(date, dateStyle); myDate = addInteger(myDate, dateType, amount); dateString = DateToString(myDate, dateStyle); } return dateString; } /** * 增加日期中某类型的某数值。如增加日期 * * @param date * 日期 * @param dateType * 类型 * @param amount * 数值 * @return 计算后日期 */ private static Date addInteger(Date date, int dateType, int amount) { Date myDate = null; if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(dateType, amount); myDate = calendar.getTime(); } return myDate; } /** * 获取精确的日期 * * @param timestamps * 时间long集合 * @return 日期 */ private static Date getAccurateDate(List<Long> timestamps) { Date date = null; long timestamp = 0; Map<Long, long[]> map = new HashMap<Long, long[]>(); List<Long> absoluteValues = new ArrayList<Long>(); if (timestamps != null && timestamps.size() > 0) { if (timestamps.size() > 1) { for (int i = 0; i < timestamps.size(); i++) { for (int j = i + 1; j < timestamps.size(); j++) { long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j)); absoluteValues.add(absoluteValue); long[] timestampTmp = { timestamps.get(i), timestamps.get(j) }; map.put(absoluteValue, timestampTmp); } } // 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的。此时minAbsoluteValue为0 // 因此不能将minAbsoluteValue取默认值0 long minAbsoluteValue = -1; if (!absoluteValues.isEmpty()) { minAbsoluteValue = absoluteValues.get(0); for (int i = 1; i < absoluteValues.size(); i++) { if (minAbsoluteValue > absoluteValues.get(i)) { minAbsoluteValue = absoluteValues.get(i); } } } if (minAbsoluteValue != -1) { long[] timestampsLastTmp = map.get(minAbsoluteValue); long dateOne = timestampsLastTmp[0]; long dateTwo = timestampsLastTmp[1]; if (absoluteValues.size() > 1) { timestamp = Math.abs(dateOne) > Math.abs(dateTwo) ? dateOne : dateTwo; } } } else { timestamp = timestamps.get(0); } } if (timestamp != 0) { date = new Date(timestamp); } return date; } /** * 判断字符串是否为日期字符串 * * @param date * 日期字符串 * @return true or false */ public static boolean isDate(String date) { boolean isDate = false; if (date != null) { if (getDateStyle(date) != null) { isDate = true; } } return isDate; } /** * 获取日期字符串的日期风格。失敗返回null。 * * @param date * 日期字符串 * @return 日期风格 */ public static DateStyle getDateStyle(String date) { DateStyle dateStyle = null; Map<Long, DateStyle> map = new HashMap<Long, DateStyle>(); List<Long> timestamps = new ArrayList<Long>(); for (DateStyle style : DateStyle.values()) { if (style.isShowOnly()) { continue; } Date dateTmp = null; if (date != null) { try { ParsePosition pos = new ParsePosition(0); dateTmp = getDateFormat(style.getValue()).parse(date, pos); if (pos.getIndex() != date.length()) { dateTmp = null; } } catch (Exception e) { } } if (dateTmp != null) { timestamps.add(dateTmp.getTime()); map.put(dateTmp.getTime(), style); } } Date accurateDate = getAccurateDate(timestamps); if (accurateDate != null) { dateStyle = map.get(accurateDate.getTime()); } return dateStyle; } /** * 将日期字符串转化为日期。失败返回null。 * * @param date * 日期字符串 * @return 日期 */ public static Date StringToDate(String date) { DateStyle dateStyle = getDateStyle(date); return StringToDate(date, dateStyle); } /** * 将日期字符串转化为日期。失败返回null。 * * @param date * 日期字符串 * @param pattern * 日期格式 * @return 日期 */ public static Date StringToDate(String date, String pattern) { Date myDate = null; if (date != null) { try { myDate = getDateFormat(pattern).parse(date); } catch (Exception e) { } } return myDate; } /** * 将日期字符串转化为日期。失败返回null。 * * @param date * 日期字符串 * @param dateStyle * 日期风格 * @return 日期 */ public static Date StringToDate(String date, DateStyle dateStyle) { Date myDate = null; if (dateStyle != null) { myDate = StringToDate(date, dateStyle.getValue()); } return myDate; } /** * 将日期转化为日期字符串。失败返回null。 * * @param date * 日期 * @param pattern * 日期格式 * @return 日期字符串 */ public static String DateToString(Date date, String pattern) { String dateString = null; if (date != null) { try { dateString = getDateFormat(pattern).format(date); } catch (Exception e) { } } return dateString; } /** * 将日期转化为日期字符串。失败返回null。 * * @param date * 日期 * @param dateStyle * 日期风格 * @return 日期字符串 */ public static String DateToString(Date date, DateStyle dateStyle) { String dateString = null; if (dateStyle != null) { dateString = DateToString(date, dateStyle.getValue()); } return dateString; } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param newPattern * 新日期格式 * @return 新日期字符串 */ public static String StringToString(String date, String newPattern) { DateStyle oldDateStyle = getDateStyle(date); return StringToString(date, oldDateStyle, newPattern); } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param newDateStyle * 新日期风格 * @return 新日期字符串 */ public static String StringToString(String date, DateStyle newDateStyle) { DateStyle oldDateStyle = getDateStyle(date); return StringToString(date, oldDateStyle, newDateStyle); } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param olddPattern * 旧日期格式 * @param newPattern * 新日期格式 * @return 新日期字符串 */ public static String StringToString(String date, String olddPattern, String newPattern) { return DateToString(StringToDate(date, olddPattern), newPattern); } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param olddDteStyle * 旧日期风格 * @param newParttern * 新日期格式 * @return 新日期字符串 */ public static String StringToString(String date, DateStyle olddDteStyle, String newParttern) { String dateString = null; if (olddDteStyle != null) { dateString = StringToString(date, olddDteStyle.getValue(), newParttern); } return dateString; } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param olddPattern * 旧日期格式 * @param newDateStyle * 新日期风格 * @return 新日期字符串 */ public static String StringToString(String date, String olddPattern, DateStyle newDateStyle) { String dateString = null; if (newDateStyle != null) { dateString = StringToString(date, olddPattern, newDateStyle.getValue()); } return dateString; } /** * 将日期字符串转化为另一日期字符串。失败返回null。 * * @param date * 旧日期字符串 * @param olddDteStyle * 旧日期风格 * @param newDateStyle * 新日期风格 * @return 新日期字符串 */ public static String StringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) { String dateString = null; if (olddDteStyle != null && newDateStyle != null) { dateString = StringToString(date, olddDteStyle.getValue(), newDateStyle.getValue()); } return dateString; } /** * 增加日期的年份。失败返回null。 * * @param date * 日期 * @param yearAmount * 增加数量。可为负数 * @return 增加年份后的日期字符串 */ public static String addYear(String date, int yearAmount) { return addInteger(date, Calendar.YEAR, yearAmount); } /** * 增加日期的年份。失败返回null。 * * @param date * 日期 * @param yearAmount * 增加数量。可为负数 * @return 增加年份后的日期 */ public static Date addYear(Date date, int yearAmount) { return addInteger(date, Calendar.YEAR, yearAmount); } /** * 增加日期的月份。失败返回null。 * * @param date * 日期 * @param monthAmount * 增加数量。可为负数 * @return 增加月份后的日期字符串 */ public static String addMonth(String date, int monthAmount) { return addInteger(date, Calendar.MONTH, monthAmount); } /** * 增加日期的月份。失败返回null。 * * @param date * 日期 * @param monthAmount * 增加数量。可为负数 * @return 增加月份后的日期 */ public static Date addMonth(Date date, int monthAmount) { return addInteger(date, Calendar.MONTH, monthAmount); } /** * 增加日期的天数。失败返回null。 * * @param date * 日期字符串 * @param dayAmount * 增加数量。可为负数 * @return 增加天数后的日期字符串 */ public static String addDay(String date, int dayAmount) { return addInteger(date, Calendar.DATE, dayAmount); } /** * 增加日期的天数。失败返回null。 * * @param date * 日期 * @param dayAmount * 增加数量。可为负数 * @return 增加天数后的日期 */ public static Date addDay(Date date, int dayAmount) { return addInteger(date, Calendar.DATE, dayAmount); } /** * 增加日期的小时。失败返回null。 * * @param date * 日期字符串 * @param hourAmount * 增加数量。可为负数 * @return 增加小时后的日期字符串 */ public static String addHour(String date, int hourAmount) { return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount); } /** * 增加日期的小时。失败返回null。 * * @param date * 日期 * @param hourAmount * 增加数量。可为负数 * @return 增加小时后的日期 */ public static Date addHour(Date date, int hourAmount) { return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount); } /** * 增加日期的分钟。失败返回null。 * * @param date * 日期字符串 * @param minuteAmount * 增加数量。可为负数 * @return 增加分钟后的日期字符串 */ public static String addMinute(String date, int minuteAmount) { return addInteger(date, Calendar.MINUTE, minuteAmount); } /** * 增加日期的分钟。失败返回null。 * * @param date * 日期 * @param minuteAmount * 增加数量。可为负数 * @return 增加分钟后的日期 */ public static Date addMinute(Date date, int minuteAmount) { return addInteger(date, Calendar.MINUTE, minuteAmount); } /** * 增加日期的秒钟。失败返回null。 * * @param date * 日期字符串 * @param secondAmount * 增加数量。可为负数 * @return 增加秒钟后的日期字符串 */ public static String addSecond(String date, int secondAmount) { return addInteger(date, Calendar.SECOND, secondAmount); } /** * 增加日期的秒钟。失败返回null。 * * @param date * 日期 * @param secondAmount * 增加数量。可为负数 * @return 增加秒钟后的日期 */ public static Date addSecond(Date date, int secondAmount) { return addInteger(date, Calendar.SECOND, secondAmount); } /** * 获取日期的年份。失败返回0。 * * @param date * 日期字符串 * @return 年份 */ public static int getYear(String date) { return getYear(StringToDate(date)); } /** * 获取日期的年份。失败返回0。 * * @param date * 日期 * @return 年份 */ public static int getYear(Date date) { return getInteger(date, Calendar.YEAR); } /** * 获取日期的月份。失败返回0。 * * @param date * 日期字符串 * @return 月份 */ public static int getMonth(String date) { return getMonth(StringToDate(date)); } /** * 获取日期的月份。失败返回0。 * * @param date * 日期 * @return 月份 */ public static int getMonth(Date date) { return getInteger(date, Calendar.MONTH) + 1; } /** * 获取日期的天数。失败返回0。 * * @param date * 日期字符串 * @return 天 */ public static int getDay(String date) { return getDay(StringToDate(date)); } /** * 获取日期的天数。失败返回0。 * * @param date * 日期 * @return 天 */ public static int getDay(Date date) { return getInteger(date, Calendar.DATE); } /** * 获取日期的小时。失败返回0。 * * @param date * 日期字符串 * @return 小时 */ public static int getHour(String date) { return getHour(StringToDate(date)); } /** * 获取日期的小时。失败返回0。 * * @param date * 日期 * @return 小时 */ public static int getHour(Date date) { return getInteger(date, Calendar.HOUR_OF_DAY); } /** * 获取日期的分钟。失败返回0。 * * @param date * 日期字符串 * @return 分钟 */ public static int getMinute(String date) { return getMinute(StringToDate(date)); } /** * 获取日期的分钟。失败返回0。 * * @param date * 日期 * @return 分钟 */ public static int getMinute(Date date) { return getInteger(date, Calendar.MINUTE); } /** * 获取日期的秒钟。失败返回0。 * * @param date * 日期字符串 * @return 秒钟 */ public static int getSecond(String date) { return getSecond(StringToDate(date)); } /** * 获取日期的秒钟。失败返回0。 * * @param date * 日期 * @return 秒钟 */ public static int getSecond(Date date) { return getInteger(date, Calendar.SECOND); } /** * 获取日期 。默认yyyy-MM-dd格式。失败返回null。 * * @param date * 日期字符串 * @return 日期 */ public static String getDate(String date) { return StringToString(date, DateStyle.YYYY_MM_DD); } /** * 获取日期。默认yyyy-MM-dd格式。失败返回null。 * * @param date * 日期 * @return 日期 */ public static String getDate(Date date) { return DateToString(date, DateStyle.YYYY_MM_DD); } /** * 获取日期的时间。默认HH:mm:ss格式。失败返回null。 * * @param date * 日期字符串 * @return 时间 */ public static String getTime(String date) { return StringToString(date, DateStyle.HH_MM_SS); } /** * 获取日期的时间。默认HH:mm:ss格式。失败返回null。 * * @param date * 日期 * @return 时间 */ public static String getTime(Date date) { return DateToString(date, DateStyle.HH_MM_SS); } /** * 获取日期的星期。失败返回null。 * * @param date * 日期字符串 * @return 星期 */ public static Week getWeek(String date) { Week week = null; DateStyle dateStyle = getDateStyle(date); if (dateStyle != null) { Date myDate = StringToDate(date, dateStyle); week = getWeek(myDate); } return week; } /** * 获取日期的星期。失败返回null。 * * @param date * 日期 * @return 星期 */ public static Week getWeek(Date date) { Week week = null; Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1; switch (weekNumber) { case 0: week = Week.SUNDAY; break; case 1: week = Week.MONDAY; break; case 2: week = Week.TUESDAY; break; case 3: week = Week.WEDNESDAY; break; case 4: week = Week.THURSDAY; break; case 5: week = Week.FRIDAY; break; case 6: week = Week.SATURDAY; break; } return week; } /** * 获取两个日期相差的天数 * * @param date * 日期字符串 * @param otherDate * 另一个日期字符串 * @return 相差天数。如果失败则返回-1 */ public static int getIntervalDays(String date, String otherDate) { return getIntervalDays(StringToDate(date), StringToDate(otherDate)); } /** * @param date * 日期 * @param otherDate * 另一个日期 * @return 相差天数。如果失败则返回-1 */ public static int getIntervalDays(Date date, Date otherDate) { int num = -1; Date dateTmp = DateUtils.StringToDate(DateUtils.getDate(date), DateStyle.YYYY_MM_DD); Date otherDateTmp = DateUtils.StringToDate(DateUtils.getDate(otherDate), DateStyle.YYYY_MM_DD); if (dateTmp != null && otherDateTmp != null) { long time = Math.abs(dateTmp.getTime() - otherDateTmp.getTime()); num = (int) (time / (24 * 60 * 60 * 1000)); } return num; } /** * 是否晚于当前时间 * * @param date * @return */ public static boolean isAfterNow(Date date){ return date.getTime() > new Date().getTime(); } /** * long转string类型date * @param longStr * @param format * @return */ public static String longToDateStr(String longStr,String format){ String dateStr = ""; if(StringUtils.isBlank(longStr)){ return dateStr; }else{ long time = Long.parseLong(longStr); Date date = new Date(time); SimpleDateFormat sd = new SimpleDateFormat(format); return sd.format(date); } }}
0 0
- Web 开发工具类(5) | DateUtils
- 日期工具类DateUtils
- 日期工具类DateUtils
- DateUtils 工具类
- DateUtils工具类
- DateUtils日期工具类
- 日期工具类DateUtils
- 日期工具类DateUtils
- DateUtils 日期工具类
- DateUtils工具类
- Java-DateUtils工具类
- DateUtils工具类
- 日期工具类DateUtils
- DateUtils 日期工具类
- DateUtils时间工具类
- DateUtils时间工具类探究
- javaScript日期工具类DateUtils
- java工具类开发之日期工具类DateUtils和读取属性配置文件工具类PropertiesUtils
- mapreduce中的压缩
- [置顶] 自定义类自动加载类
- http接口请求参数签名工具类的实现和测试代码
- ListView中getView()的原理
- R 画图之ggplot(1)
- Web 开发工具类(5) | DateUtils
- [置顶] 写个日志封装器....感觉用起来很爽
- vs2013 项目属性配置的总结(主要用于opencv不同版本的管理)
- [置顶] orm 用多了,忽然发觉SQL不会写了... 整个基本的功能重新学习SQL,改自fleaphp
- jsTree的基本使用方法以及按需装载子节点
- Android Studio 编译耗时长解决方法
- [置顶] sfw 最初版本
- 字符、字节的概念及其区别
- [置顶] 自己动手写CMS