java常见的时间⼯具类-DateUtils package com.appmon.util;
DecimalFormat;
ParseException;
SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apachemons.lang3.time.DateFormatUtils;
public class DateUtils {
/**
* 仅显⽰年⽉⽇,例如 2015-08-11.
*/
public static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* 显⽰年⽉⽇时分秒,例如 2015-08-11 09:51:53.
*/
public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 仅显⽰时分秒,例如 09:51:53.
*/
public static final String TIME_FORMAT = "HH:mm:ss";
/**
* 每天的毫秒数 8640000.
*/
public static final long MILLISECONDS_PER_DAY = 86400000L;
/**
* 每周的天数.
*/
public static final long DAYS_PER_WEEK = 7L;
/**
* 每⼩时毫秒数.
*/
public static final long MILLISECONDS_PER_HOUR = 3600000L;
/**
* 每分钟秒数.
*/
public static final long SECONDS_PER_MINUTE = 60L;
/**
* 每⼩时秒数.
*/
public static final long SECONDS_PER_HOUR = 3600L;
/**
* 每天秒数.
*/
public static final long SECONDS_PER_DAY = 86400L;
/
**
* 每个⽉秒数,默认每⽉30天.
*/
public static final long SECONDS_PER_MONTH = 2592000L;
/**
* 每年秒数,默认每年365天.
*/
public static final long SECONDS_PER_YEAR = 31536000L;
/**
* 常⽤的时间格式.
*/
private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" };
/**
* 得到当前⽇期字符串.
* @return String ⽇期字符串,例如2015-08-11
* @since 1.0
*/
public static String getDate() {
return getDate(DateUtils.DATE_FORMAT);
}
/**
public static String getTime() {
return formatDate(new Date(), DateUtils.TIME_FORMAT);
}
/**
* 得到当前⽇期和时间字符串.
* @return String ⽇期和时间字符串,例如 2015-08-11 09:51:53
* @since 1.0
*/
public static String getDateTime() {
return formatDate(new Date(), DateUtils.DATETIME_FORMAT);
}
/
**
* 获取当前时间指定格式下的字符串.
* @param pattern
*            转化后时间展⽰的格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等    * @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 获取指定⽇期的字符串格式.
* @param date  需要格式化的时间,不能为空
* @param pattern 时间格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等
* @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public static String getDate(Date date, String pattern) {
return DateFormatUtils.format(date, pattern);
}
/**
* 获取⽇期时间字符串,默认格式为(yyyy-MM-dd).
* @param date 需要转化的⽇期时间
* @param pattern 时间格式,例如"yyyy-MM-dd" "HH:mm:ss" "E"等
* @return String 格式转换后的时间字符串
* @since 1.0
*/
public static String formatDate(Date date, pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, DateUtils.DATE_FORMAT);
}
return formatDate;
}
/**
* 获取当前年份字符串.
* @return String 当前年份字符串,例如 2015
* @since 1.0
*/
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
/**
* 获取当前⽉份字符串.
* @return String 当前⽉份字符串,例如 08
* @since 1.0
*/
public static String getMonth() {
return formatDate(new Date(), "MM");
}
/**
* 获取当前天数字符串.
* @return String 当前天数字符串,例如 11
* @since 1.0
*/
public static String getDay() {
return formatDate(new Date(), "dd");
java时间日期格式转换}
/**
public static String getWeek() {
return formatDate(new Date(), "E");
}
/**
* 将⽇期型字符串转换为⽇期格式.
* ⽀持的⽇期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"
* @param str
* @return Date
* @since 1.0
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return org.apachemons.lang3.time.DateUtils.String(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取当前⽇期与指定⽇期相隔的天数.
* @param date 给定的⽇期
* @return long ⽇期间隔天数,正数表⽰给定⽇期在当前⽇期之前,负数表⽰在当前⽇期之后
* @since 1.0
*/
public static long pastDays(Date date) {
/
/ 将指定⽇期转换为yyyy-MM-dd格式
date = DateUtils.parseDate(DateUtils.formatDate(date, DateUtils.DATE_FORMAT));
// 当前⽇期转换为yyyy-MM-dd格式
Date currentDate = DateUtils.parseDate(DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT));      long t=0;
if(date!=null&¤tDate!=null){
t = (Time() - Time()) / DateUtils.MILLISECONDS_PER_DAY;
}
return t;
}
/**
* 获取当前⽇期指定天数之后的⽇期.
* @param num  相隔天数
* @return Date ⽇期
* @since 1.0
*/
public static Date nextDay(int num) {
Calendar curr = Instance();
curr.set(Calendar.DAY_OF_MONTH, (Calendar.DAY_OF_MONTH) + num);
Time();
}
/**
* 获取当前⽇期指定⽉数之后的⽇期.
* @param num  间隔⽉数
* @return Date ⽇期
* @since 1.0
*/
public static Date nextMonth(int num) {
Calendar curr = Instance();
curr.set(Calendar.MONTH, (Calendar.MONTH) + num);
Time();
}
/**
* 获取当前⽇期指定年数之后的⽇期.
* @param num    间隔年数
* @return Date ⽇期
* @since 1.0
*/
public static Date nextYear(int num) {
Calendar curr = Instance();
curr.set(Calendar.YEAR, (Calendar.YEAR) + num);
Time();
}
/**
* 将 Date ⽇期转化为 Calendar 类型⽇期.
* @param date  给定的时间,若为null,则默认为当前时间
* @return Calendar Calendar对象
* @since 1.0
*/
public static Calendar getCalendar(Date date) {
Calendar calendar = Instance();
// calendar.setFirstDayOfWeek(Calendar.SUNDAY);//每周从周⽇开始
// calendar.setMinimalDaysInFirstWeek(1); // 设置每周最少为1天
if (date != null) {
calendar.setTime(date);
}
return calendar;
}
/**
* 计算两个⽇期之间相差天数.
* @param start    计算开始⽇期
* @param end      计算结束⽇期
* @return long 相隔天数
* @since 1.0
*/
public static long getDaysBetween(Date start, Date end) {
// 将指定⽇期转换为yyyy-MM-dd格式
start = DateUtils.parseDate(DateUtils.formatDate(start, DateUtils.DATE_FORMAT));
// 当前⽇期转换为yyyy-MM-dd格式
end = DateUtils.parseDate(DateUtils.formatDate(end, DateUtils.DATE_FORMAT));
long diff=0;
if(start!=null&&end!=null) {
diff = (Time() - Time()) / DateUtils.MILLISECONDS_PER_DAY;
}
return diff;
}
/**
* 计算两个⽇期之前相隔多少周.
* @param start      计算开始时间
* @param end    计算结束时间
* @return long 相隔周数,向下取整
* @since 1.0
*/
public static long getWeeksBetween(Date start, Date end) {
return getDaysBetween(start, end) / DateUtils.DAYS_PER_WEEK;
}
/**
* 获取与指定⽇期间隔给定天数的⽇期.
* @param specifiedDay    给定的字符串格式⽇期,⽀持的⽇期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss",    *            "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss",
*            "yyyy/MM/dd HH:mm"
* @param num  间隔天数
* @return String 间隔指定天数之后的⽇期
* @since 1.0
*/
public static String getSpecifiedDayAfter(String specifiedDay, int num) {
Date specifiedDate = parseDate(specifiedDay);
Calendar c = Instance();
c.setTime(specifiedDate);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + num);
String dayAfter = Time(), DateUtils.DATE_FORMAT);
return dayAfter;
}
/**
* 计算两个⽇期之前间隔的⼩时数.
*
* @param date1
*            结束时间
* @param date2
*            开始时间
* @return String 相差的⼩时数,保留⼀位⼩数
* @since 1.0
*/
public static String dateMinus(Date date1, Date date2) {
if (date1 == null || date2 == null) {
return "0";
}
Long r = Time() - Time();
DecimalFormat df = new DecimalFormat("#.0");
double result = r * 1.0 / DateUtils.MILLISECONDS_PER_HOUR;
return df.format(result);
}
/
**
* 获取当前季度 .
*
* @return Integer 当前季度数
* @since 1.0
*/
public static Integer getCurrentSeason() {
Calendar calendar = Instance();
Integer month = (Calendar.MONTH) + 1;
int season = 0;
if (month >= 1 && month <= 3) {
season = 1;
} else if (month >= 4 && month <= 6) {
season = 2;
} else if (month >= 7 && month <= 9) {
season = 3;
} else if (month >= 10 && month <= 12) {
season = 4;
}
return season;
}
/**
* 将以秒为单位的时间转换为其他单位.
*
* @param seconds
*            秒数
* @return String 例如 16分钟前、2⼩时前、3天前、4⽉前、5年前等
* @since 1.0
*/
public static String getIntervalBySeconds(long seconds) {
StringBuffer buffer = new StringBuffer();
if (seconds < SECONDS_PER_MINUTE) {
buffer.append(seconds).append("秒前");
} else if (seconds < SECONDS_PER_HOUR) {
buffer.append(seconds / SECONDS_PER_MINUTE).append("分钟前");
} else if (seconds < SECONDS_PER_DAY) {
buffer.append(seconds / SECONDS_PER_HOUR).append("⼩时前");
} else if (seconds < SECONDS_PER_MONTH) {
buffer.append(seconds / SECONDS_PER_DAY).append("天前");
} else if (seconds < SECONDS_PER_YEAR) {
buffer.append(seconds / SECONDS_PER_MONTH).append("⽉前");
} else {
buffer.append(seconds / DateUtils.SECONDS_PER_YEAR).append("年前");      }
String();
}
/**
*
* getNowTimeBefore(记录时间相当于⽬前多久之前)
*
* @param seconds
*            秒
* @return
* @exception @since
*                1.0
* @author rlliu
*/
public static String getNowTimeBefore(long seconds) {
StringBuffer buffer = new StringBuffer();
buffer.append("上传于");
if (seconds < 3600) {
buffer.append((long) Math.floor(seconds / 60.0)).append("分钟前");
} else if (seconds < 86400) {
buffer.append((long) Math.floor(seconds / 3600.0)).append("⼩时前");
} else if (seconds < 604800) {
buffer.append((long) Math.floor(seconds / 86400.0)).append("天前");
} else if (seconds < 2592000) {
buffer.append((long) Math.floor(seconds / 604800.0)).append("周前");
} else if (seconds < 31104000) {
buffer.append((long) Math.floor(seconds / 2592000.0)).append("⽉前");
} else {
buffer.append((long) Math.floor(seconds / 31104000.0)).append("年前");
}
String();
}
/**
*
* getMonthsBetween(查询两个⽇期相隔的⽉份)
*
* @param startDate 开始⽇期1 (格式yyyy-MM-dd)
* @param endDate  截⽌⽇期2 (格式yyyy-MM-dd)
* @return

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。