/**
* function:
* @since 2017年5月24日 上午10:01:12
* @author
* @copyright
*/
package com.cdhy.incl.utils;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author haoyunlai
*
*/
public class DateUtil {
public static final SimpleDateFormat YMD14 = new SimpleDateFormat(
"yyyyMMddHHmmss");
public static final SimpleDateFormat YMD20 = new SimpleDateFormat(
"yyyyMMddHHmmssSSSSSS");
public static final SimpleDateFormat YMD8 = new SimpleDateFormat("yyyyMMdd");
/**
* 获取当前系统时间,格式为:yyyyMMddHHmmss
*
* @author
* @since 2016年12月5日 下午2:50:32
* @return
*/
public static String getSysDateStr() {
return YMD14.format(new Date());
}
/**
* 将格式为@_date转换为数字
*
* @author
* @since 2017年5月24日 上午10:06:36
* @param _date
* 如:2017-05-24 09:30:25
* @return 20170524093025
*/
public static String strToDateNoSeparator(final String _date) {
return _date == null ? null : _date.replace("-", "").replace(" ", "")
.replace(":", "").replace(".", "");
}
/**
* 转timestamp日期
*
* @author
* @since 2017年6月5日 上午10:06:48
* @param date
* 如:2017-05-24 09:30:25或20170524093025
* @return
*/
public static Timestamp toTimestamp(String date) {
if (date == null) {
return null;
} else {
String _tmp = strToDateNoSeparator(date);
if (_tmp.length() < 8 || !_tmp.matches("\\d+")) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.valueOf(_tmp.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.valueOf(_tmp.substring(4, 6)) - 1);
cal.set(Calendar.DAY_OF_MONTH,
Integer.valueOf(_tmp.substring(6, 8)));
if (_tmp.length() >= 14) {
cal.set(Calendar.HOUR_OF_DAY,
Integer.valueOf(_tmp.substring(8, 10)));
cal.set(Calendar.MINUTE,
Integer.valueOf(_tmp.substring(10, 12)));
cal.set(Calendar.SECOND,
Integer.valueOf(_tmp.substring(12, 14)));
} else {
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
}
return new Timestamp(cal.getTimeInMillis());
}
}
/**
* 获取系统当前时间
*
* @author
* @since 2017年6月8日 下午1:41:09
* @return
*/
public static Timestamp getSysTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
/**
* 根据当前日期获取上一年日期
*
* @author
* @since 2017年7月11日 上午9:15:54
* @param curDate
* @return
*/
public static String lastYear(String curDate) {
if (curDate == null || "".equals(curDate)) {
return "";
}
final String cd = curDate.trim().replace("-", "").replace(" ", "")
.replace(":", "");
if (!cd.matches("\\d+") || cd.length() < 8) { // 错误的日期
return "";
}
Calendar cal = Calendar.getInstance();
int y = Integer.valueOf(cd.substring(0, 4));
int m = Integer.valueOf(cd.substring(4, 6));
int d = Integer.valueOf(cd.substring(6, 8));
cal.set(Calendar.YEAR, y);
cal.set(Calendar.MONTH, m - 1);
cal.set(Calendar.DAY_OF_MONTH, d - 366);
return YMD8.format(cal.getTime());
}
/**
* 获取下一年
*
* @author
* @since 2017年6月1日 下午7:16:17
* @param _date
* @return
*/
public static String getNextYear(final String _date) {
String date = _date;
if (date == null) {
return null;
} else if (date.length() < 8) {
return _date;
} else {
date = _date.replace("-", "").replace(" ", "").replace(":", "");
if (!date.matches("\\d+")) {
return _date;
}
}
int year = Integer.valueOf(date.substring(0, 4));
int month = Integer.valueOf(date.substring(4, 6));
int day = Integer.valueOf(date.substring(6, 8));
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year + 1);
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DAY_OF_MONTH, day);
return YMD8.format(cal.getTime());
}
public static Calendar toCalendar(String date14) {
if (date14 == null) {
return null;
} else {
String _tmp = strToDateNoSeparator(date14);
if (_tmp.length() < 8 || !_tmp.matches("\\d+")) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.valueOf(_tmp.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.valueOf(_tmp.substring(4, 6)) - 1);
cal.set(Calendar.DAY_OF_MONTH,
Integer.valueOf(_tmp.substring(6, 8)));
if (_tmp.length() >= 14) {
cal.set(Calendar.HOUR_OF_DAY,
Integer.valueOf(_tmp.substring(8, 10)));
cal.set(Calendar.MINUTE,
Integer.valueOf(_tmp.substring(10, 12)));
cal.set(Calendar.SECOND,
Integer.valueOf(_tmp.substring(12, 14)));
} else {
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
}
return cal;
}
}
/**
* 结果为date1-date2-dis:单位为:秒;存在空值返回-1
*
* @author
* @since 2017年7月28日 下午12:54:54
* @param date1
* @param date2
* @param dis
* @return
*/
public static long distance(String date1, String date2, int dis) {
Calendar cal1 = toCalendar(date1);
Calendar cal2 = toCalendar(date2);
long ret = -1;
if (cal1 != null && cal2 != null) {
ret = cal1.getTimeInMillis() - cal2.getTimeInMillis();
}
return ret / 1000 - dis;
}
/**
* 获取20位的时间
*
* @author
* @since 2017年8月2日 下午6:55:59
* @return
*/
public static String getSysTime20() {
return YMD20.format(new Date());
}
/**
* 加时间分钟数
*
* @author
* @since 2017年8月18日 下午6:06:14
* @param srcDate
* yyyyMMddHHmmss
* @param minute
* @return
*/
public static String dateAdd(String srcDate, int minute) {
if (srcDate == null || !srcDate.matches("\\d+")
|| srcDate.length() < 14) {
return null;
}
final String ymdhms = srcDate;
int y = Integer.valueOf(ymdhms.substring(0, 4));
int m = Integer.valueOf(ymdhms.substring(4, 6));
int d = Integer.valueOf(ymdhms.substring(6, 8));
int h = Integer.valueOf(ymdhms.substring(8, 10));
int mi = Integer.valueOf(ymdhms.substring(10, 12));
int s = Integer.valueOf(ymdhms.substring(12, 14));
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, y);
cal.set(Calendar.MONTH, m - 1);
cal.set(Calendar.DAY_OF_MONTH, d);
cal.set(Calendar.HOUR_OF_DAY, h);
cal.set(Calendar.MINUTE, mi);
cal.set(Calendar.SECOND, s);
cal.add(Calendar.MINUTE, minute);
return YMD14.format(cal.getTime());
}
/**
* 加时间分钟数
*
* @author
* @since 2017年8月18日 下午6:16:03
* @param date
* @param minute
* @return
*/
public static String dateAdd(Date date, int minute) {
final String ymdhms = YMD14.format(date);
return dateAdd(ymdhms, minute);
}
public static String fmtDate(String date8) {
if (date8 == null || date8.length() < 8) {
return date8;
}
final String d = date8.replace("-", "").replace(" ", "")
.replace(":", "");
if (d == null || d.length() < 8) {
return date8;
} else {
return d.substring(0, 4) + "-" + d.substring(4, 6) + "-"
+ d.substring(6, 8);
}
}
/**
* 当前系统时间和传入的日期比较,只比较日期不比较时间
*
* @author
* @since 2017年11月22日 下午6:42:19
* @param _inDate
* @return 1:系统时间>传入时间,0:系统时间=传入时间,-1:系统时间<传入时间
*/
public static int compareDate(String _inDate) {
String inDate = _inDate == null ? "" : _inDate.trim().replace("-", "")
.replace(" ", "").replace(":", "").replace(".", "");
if (inDate == null || inDate.isEmpty() || inDate.length() < 8
|| !inDate.matches("\\d+")) {
return -10; // 认为是比当前日期大,因为值不正确
}
// if (inDate.length() < 14) {
// inDate = inDate.concat("235959");
// }
Integer y = Integer.valueOf(inDate.substring(0, 4));
Integer m = Integer.valueOf(inDate.substring(4, 6));
Integer d = Integer.valueOf(inDate.substring(6, 8));
// Integer h = Integer.valueOf(inDate.substring(8, 10));
// Integer mi = Integer.valueOf(inDate.substring(10, 12));
// Integer s = Integer.valueOf(inDate.substring(12, 14));
Calendar inD = Calendar.getInstance();
inD.set(Calendar.YEAR, y);
inD.set(Calendar.MONTH, m - 1);
inD.set(Calendar.DAY_OF_MONTH, d);
inD.set(Calendar.HOUR_OF_DAY, 0);
inD.set(Calendar.MINUTE, 0);
inD.set(Calendar.SECOND, 0);
inD.set(Calendar.MILLISECOND, 0);
Calendar inC = Calendar.getInstance();
inC.set(Calendar.HOUR_OF_DAY, 0);
inC.set(Calendar.MINUTE, 0);
inC.set(Calendar.SECOND, 0);
inC.set(Calendar.MILLISECOND, 0);
return inC.compareTo(inD);
}
}