验证中...
随手一记
原始数据 复制代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Title DateUtil
* @Description 时间处理工具类
* @Author weihang
* @Date 2017年06月06日 下午4:27:35
*/
public class DateUtil {
public static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
public final static long MS = 1;
public final static long MILLIS_PER_SECOND = MS * 1000;
public final static long MILLIS_PER_MINUTE = MILLIS_PER_SECOND * 60;
public final static long MILLIS_PER_HOUR = MILLIS_PER_MINUTE * 60;
public final static long MILLIS_PER_DAY = MILLIS_PER_HOUR * 24;
/** 标准日期格式 */
public final static String NORM_DATE_PATTERN = "yyyy-MM-dd";
/** 标准时间格式 */
public final static String NORM_TIME_PATTERN = "HH:mm:ss";
/** 标准日期时间格式 */
public final static String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/** HTTP头中日期时间格式 */
public final static String HTTP_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z";
/** 标准日期(不含时间)格式化器 */
private final static SimpleDateFormat NORM_DATE_FORMAT = new SimpleDateFormat(NORM_DATE_PATTERN);
/** 标准时间格式化器 */
private final static SimpleDateFormat NORM_TIME_FORMAT = new SimpleDateFormat(NORM_TIME_PATTERN);
/** 标准日期时间格式化器 */
private final static SimpleDateFormat NORM_DATETIME_FORMAT = new SimpleDateFormat(NORM_DATETIME_PATTERN);
/** HTTP日期时间格式化器 */
private final static SimpleDateFormat HTTP_DATETIME_FORMAT = new SimpleDateFormat(HTTP_DATETIME_PATTERN, Locale.US);
/**
* 当前时间,格式 yyyy-MM-dd HH:mm:ss
* @return 当前时间的标准形式字符串
*/
public static String getNow() {
return formatDateTime(new Date());
}
/**
* 当前日期,格式 yyyy-MM-dd
* @return 当前日期的标准形式字符串
*/
public static String getToday() {
return formatDate(new Date());
}
/**
* 根据特定格式格式化日期
* @param date 被格式化的日期
* @param format 格式
* @return 格式化后的字符串
*/
public static String format(Date date, String format) {
return new SimpleDateFormat(format).format(date);
}
/**
* 格式 yyyy-MM-dd HH:mm:ss
* @param date 被格式化的日期
* @return 格式化后的日期
*/
public static String formatDateTime(Date date) {
return NORM_DATETIME_FORMAT.format(date);
}
/**
* 格式化为Http的标准日期格式
* @param date 被格式化的日期
* @return HTTP标准形式日期字符串
*/
public static String formatHttpDate(Date date) {
return HTTP_DATETIME_FORMAT.format(date);
}
/**
* 格式 yyyy-MM-dd
* @param date 被格式化的日期
* @return 格式化后的字符串
*/
public static String formatDate(Date date) {
return NORM_DATE_FORMAT.format(date);
}
/**
* 将特定格式的日期转换为Date对象
* @param dateString 特定格式的日期
* @param format 格式,例如yyyy-MM-dd
* @return 日期对象
*/
public static Date parse(String dateString, String format) {
try {
return (new SimpleDateFormat(format)).parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + format + " error!", e);
}
return null;
}
/**
* 格式yyyy-MM-dd HH:mm:ss
* @param dateString 标准形式的时间字符串
* @return 日期对象
*/
public static Date parseDateTime(String dateString) {
try {
return NORM_DATETIME_FORMAT.parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + NORM_DATETIME_FORMAT.toPattern() + " error!", e);
}
return null;
}
/**
* 格式yyyy-MM-dd
* @param dateString 标准形式的日期字符串
* @return 日期对象
*/
public static Date parseDate(String dateString) {
try {
return NORM_DATE_FORMAT.parse(dateString);
} catch (ParseException e) {
logger.error("Parse " + dateString + " with format " + NORM_DATE_PATTERN + " error!", e);
}
return null;
}
/**
* 格式HH:mm:ss
* @param timeString 标准形式的日期字符串
* @return 日期对象
*/
public static Date parseTime(String timeString) {
try {
return NORM_TIME_FORMAT.parse(timeString);
} catch (ParseException e) {
logger.error("Parse " + timeString + " with format " + NORM_TIME_PATTERN + " error!", e);
}
return null;
}
/**
* 三种字符串格式转换为日期格式:<br>
* 1、yyyy-MM-dd HH:mm:ss<br>
* 2、yyyy-MM-dd<br>
* 3、HH:mm:ss
* @param dateStr 日期字符串
* @return 日期
*/
public static Date parse(String dateStr) {
int length = dateStr.length();
try {
if (length == DateUtil.NORM_DATETIME_PATTERN.length()) {
return parseDateTime(dateStr);
} else if (length == DateUtil.NORM_DATE_PATTERN.length()) {
return parseDate(dateStr);
} else if (length == DateUtil.NORM_TIME_PATTERN.length()) {
return parseTime(dateStr);
}
} catch (Exception e) {
logger.error("Parse " + dateStr + " with format normal error!", e);
}
return null;
}
/**
* @Description 判断是否是闰年
* @param date
* @return 是/否
*/
public static boolean isLeapYEAR(Date date) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
int year = cd.get(Calendar.YEAR);
if (year % 4 == 0 && year % 100 != 0 | year % 400 == 0) {
return true;
} else {
return false;
}
}
/**
* 计算 fromDate 到 toDate 相差多少个月
* @param fromDate
* @param toDate
* @return 月数
*/
public static int getMonthByMinusDate(Date fromDate, Date toDate) {
Calendar df = Calendar.getInstance();
df.setTime(fromDate);
Calendar dt = Calendar.getInstance();
dt.setTime(toDate);
return dt.get(Calendar.YEAR) * 12 + dt.get(Calendar.MONTH)
- (df.get(Calendar.YEAR) * 12 + df.get(Calendar.MONTH));
}
/**
* 计算 fromDate 到 toDate 相差多少天
* @param fromDate
* @param toDate
* @return 天数
*/
public static long getOffsetDays(Date fromDate, Date toDate) {
long time1 = fromDate.getTime();
long time2 = toDate.getTime();
return (time1 - time2) / (1000 * 60 * 60 * 24);
}
/**
* 判断给定时间的时间节点
* @param d 给定的时间
*/
public static String getFriendlytime(Date d) {
long delta = (new Date().getTime() - d.getTime()) / 1000;
if (delta <= 0)
return SimpleDateFormat.getInstance().format(d);
if (delta / (60 * 60 * 24 * 365) > 0)
return delta / (60 * 60 * 24 * 365) + "年前";
if (delta / (60 * 60 * 24 * 30) > 0)
return delta / (60 * 60 * 24 * 30) + "个月前";
if (delta / (60 * 60 * 24 * 7) > 0)
return delta / (60 * 60 * 24 * 7) + "周前";
if (delta / (60 * 60 * 24) > 0)
return delta / (60 * 60 * 24) + "天前";
if (delta / (60 * 60) > 0)
return delta / (60 * 60) + "小时前";
if (delta / (60) > 0)
return delta / (60) + "分钟前";
return "刚刚";
}
/**
* 计算年龄
* @param birthday 生日日期
* @return age 年龄
*/
public static int calcAge(String birthday) {
Date birthDay = parse(birthday);
int age = 0;
try {
Calendar now = Calendar.getInstance();
now.setTime(new Date());// 当前时间
Calendar birth = Calendar.getInstance();
birth.setTime(birthDay);
if (birth.after(now)) {//如果传入的时间,在当前时间的后面,返回0岁
age = 0;
} else {
age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
if (now.get(Calendar.DAY_OF_YEAR) > birth.get(Calendar.DAY_OF_YEAR)) {
age += 1;
}
}
return age;
} catch (Exception e) {//兼容性更强,异常后返回数据
return 0;
}
}
/**
* 从身份证中获取出生日期
* @param idNo 身份证号码
* @return String 生日
*/
public static String getBirthDayFromIDCard(String idNo) {
Calendar cd = Calendar.getInstance();
if (idNo.length() == 15) {
cd.set(Calendar.YEAR, Integer.valueOf("19" + idNo.substring(6, 8)).intValue());
cd.set(Calendar.MONTH, Integer.valueOf(idNo.substring(8, 10)).intValue() - 1);
cd.set(Calendar.DAY_OF_MONTH, Integer.valueOf(idNo.substring(10, 12)).intValue());
} else if (idNo.length() == 18) {
cd.set(Calendar.YEAR, Integer.valueOf(idNo.substring(6, 10)).intValue());
cd.set(Calendar.MONTH, Integer.valueOf(idNo.substring(10, 12)).intValue() - 1);
cd.set(Calendar.DAY_OF_MONTH, Integer.valueOf(idNo.substring(12, 14)).intValue());
}
return formatDate(cd.getTime());
}
/**
* 昨天
* @return 昨天
*/
public static Date yesterday() {
return offsiteDate(new Date(), Calendar.DAY_OF_YEAR, -1);
}
/**
* 上周
* @return 上周
*/
public static Date lastWeek() {
return offsiteDate(new Date(), Calendar.WEEK_OF_YEAR, -1);
}
/**
* 上个月
* @return 上个月
*/
public static Date lastMonth() {
return offsiteDate(new Date(), Calendar.MONTH, -1);
}
/**
* 获取指定日期偏移指定时间后的时间
* @param date 基准日期
* @param calendarField 偏移的粒度大小(小时、天、月等)使用Calendar中的常数
* @param offsite 偏移量,正数为向后偏移,负数为向前偏移
* @return 偏移后的日期
*/
public static Date offsiteDate(Date date, int calendarField, int offsite) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(calendarField, offsite);
return cal.getTime();
}
/**
* 判断两个日期相差的时长<br/>
* @param subtrahend 减数日期
* @param minuend 被减数日期
* @param diffField 相差的选项:相差的天、小时
* @return 日期差
*/
public static long diff(Date subtrahend, Date minuend, long diffField) {
long diff = minuend.getTime() - subtrahend.getTime();
return diff / diffField;
}
/**
* 计时,常用于记录某段代码的执行时间,单位:纳秒
* @param preTime 之前记录的时间
* @return 时间差,纳秒
*/
public static long spendNt(long preTime) {
return System.nanoTime() - preTime;
}
/**
* 计时,常用于记录某段代码的执行时间,单位:毫秒
* @param preTime 之前记录的时间
* @return 时间差,毫秒
*/
public static long spendMs(long preTime) {
return System.currentTimeMillis() - preTime;
}
}

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助