package com.atom.util;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtil {
public final static String DEF_DATE_FORMAT = "yyyy/MM/dd";
public final static String DEF_TIME_FORMAT = "kk:mm";
public final static String DEF_DATE_TIME = "yyyy/MM/dd HH:mm";
public final static String ORA_DATE_FORMAT = "yyyy-MM-dd";
public final static String ORA_TIME_FORMAT = "HH24:MI";
public final static String ORA_DATE_TIME = "YYYY-MM-DD HH24:MI";
public final static String ORA_DATE_TIME_FORMAT = "yyyyMMddHHMM";
public final static String SQL_DATE_TIME_FORMAT_LIMIT = "yyyy-MM-dd HH:mm:ss";
public final static String FILE_INDENTIFY_FORMAT = "yyyyMMddHHmmss";
public final static long ONE_DAY = 24*60*60*1000;
/**
* Get Long object from default format string
*
* @param dateStr
* @return
*/
public static Long strToLong(String dateStr) {
try {
SimpleDateFormat formatDate = new SimpleDateFormat(DEF_DATE_FORMAT);
ParsePosition pos = new java.text.ParsePosition(0);
Date tempDate = formatDate.parse(dateStr, pos);
return new Long(tempDate.getTime());
} catch (Exception e) {
return null;
}
}
/**
* 方法 getBetweenDays 得到两个日期的间隔天数
*
* @param endDate
* 时间字符串1,如:2001-07-17 11:00:00
* @param startDate
* 时间字符串2,如:2001-12-31 11:00:00
* @return long 间隔天数(long)
*/
public static long getBetweenDays(String endDate, String startDate) {
if (endDate == null || startDate == null)
return -1;
if (endDate.length() < 10 || startDate.length() < 10)
return -1;
int startYear = 2001, startMonth = 12, startDay = 31;
int endYear = 2001, endMonth = 12, endDay = 31;
try {
startYear = Integer.parseInt(endDate.substring(0, 4));
startMonth = Integer.parseInt(endDate.substring(5, 7));
startDay = Integer.parseInt(endDate.substring(8, 10));
endYear = Integer.parseInt(startDate.substring(0, 4));
endMonth = Integer.parseInt(startDate.substring(5, 7));
endDay = Integer.parseInt(startDate.substring(8, 10));
} catch (NumberFormatException e) {
} catch (Exception e) {
}
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.set(startYear, startMonth - 1, startDay, 1, 0, 0);
endCalendar.set(endYear, endMonth - 1, endDay, 0, 0, 0);
Date endDateTemp = startCalendar.getTime();
Date startDateTemp = endCalendar.getTime();
long startTime = endDateTemp.getTime();
long endTime = startDateTemp.getTime();
long times = startTime - endTime;
// long days = Math.abs(times / ( 1000 *
// 3600 * 24
// ));
long days = times / (1000 * 3600 * 24);
return days;
}
/**
* 方法 getAfterDate 得到与指定日期相差指定天数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前或向后的天数,向后为正数,向前为负值
* @return 处理后的日期字符串
*/
public static String getAfterDate(String baseDate, int dayCount) {
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
calendar.add(Calendar.DATE, dayCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(_date);
return dateString;
}
public static Date addDays(Date baseDate,int addDaysNum){
return new Date(baseDate.getTime()+3*ONE_DAY);
}
public static String parse(String baseDate) {
String dateString = baseDate;
baseDate = baseDate.trim().toLowerCase();
try {
if (baseDate.length() == 11) {
dateString = baseDate.substring(7);
if (baseDate.substring(3, 6).equals("jan"))
dateString += "-01-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("feb"))
dateString += "-02-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("mar"))
dateString += "-03-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("apr"))
dateString += "-04-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("may"))
dateString += "-05-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jun"))
dateString += "-06-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jul"))
dateString += "-07-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("aug"))
dateString += "-08-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("sep"))
dateString += "-09-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("oct"))
dateString += "-10-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("nov"))
dateString += "-11-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("dec"))
dateString += "-12-" + baseDate.substring(0, 2);
else
dateString = baseDate;
} else if (baseDate.length() > 11) {
dateString = baseDate.substring(7, 11);
if (baseDate.substring(3, 6).equals("jan"))
dateString += "-01-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("feb"))
dateString += "-02-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("mar"))
dateString += "-03-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("apr"))
dateString += "-04-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("may"))
dateString += "-05-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jun"))
dateString += "-06-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jul"))
dateString += "-07-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("aug"))
dateString += "-08-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("sep"))
dateString += "-09-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("oct"))
dateString += "-10-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("nov"))
dateString += "-11-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("dec"))
dateString += "-12-" + baseDate.substring(0, 2);
else
dateString = baseDate;
if (!dateString.equals(baseDate)) {
dateString += baseDate.substring(11);
}
}
} catch (Exception ex) {
dateString = baseDate;
}
return dateString;
}
/**
* 方法 getBeforeDate 得到与指定日期之前相差指定天数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前的天数
* @return 相减后的日期字符串
*/
public static String getBeforeDate(String baseDate, int dayCount) {
return getAfterDate(baseDate, -dayCount);
}
/**
* 方法 getAfterMonth 得到与指定日期相差指定月数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前或向后的月数,向后为正数,向前为负值
* @return 相加后的日期字符串
*/
public static String getAfterMonth(String baseDate, int monthCount) {
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
calendar.add(Calendar.MONTH, monthCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(_date);
return dateString;
}
/**
* 方法 getBeforeMonth 得到与指定日期之前相差指定月数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前的月数
* @return 相减后的日期字符串
*/
public static String getBeforeMonth(String baseDate, int monthCount) {
return getAfterMonth(baseDate, -monthCount);
}
/**
* 方法 getEndDate 得到与指定日期相差指定月数并减去一天的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前或向后的月数,向后为正数,向前为负值
* @return 相加后的日期字符串
*/
public static String getEndDate(String baseDate, int monthCount) {
// int year =
// Integer.parseInt(baseDate.substring(0,4));
// int month =
// Integer.parseInt(baseDate.substring(5,7));
int day = Integer.parseInt(baseDate.substring(8, 10));
String endDate = getAfterMonth(baseDate, monthCount);
// int endYear =
// Integer.parseInt(endDate.substring(0,4));
// int endMonth =
// Integer.parseInt(endDate.substring(5,7));
int endDay = Integer.parseInt(endDate.substring(8, 10));
// 说明日期没变
if (endDay == day) {
// 月数为正则为减一天
if (monthCount > 0) {
endDate = getAfterDate(endDate, -1);
} else {
endDate = getAfterDate(endDate, 1);
}
} else { // 日期已变
if (monthCount < 0) {
endDate = getAfterDate(endDate, 1);
}
}
return endDate;
}
/**
* 方法 getDate 得到Date型指定日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @return Date 得到Date型指定日期
*/
public static Date getDate(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
int hour = 0;
int minute = 0;
int second = 0;
if (baseDate.length() >= 13)
hour = Integer.parseInt(baseDate.substring(11, 13));
if (baseDate.length() >= 16)
minute = Integer.parseInt(baseDate.substring(14, 16));
if (baseDate.length() >= 19)
second = Integer.parseInt(baseDate.substring(17, 19));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
/**
* 方法 getDate 得到Date型指定日期
*
* @param baseDate
* 时间字符串,如:20010717
* @return Date 得到Date型指定日期
*/
public static Date getDateSmall(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(4, 6));
int date = Integer.parseInt(baseDate.substring(6));
int hour = 0;
int minute = 0;
int second = 0;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
public static java.sql.Date getSqlDate(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
Date date = getDate(baseDate);
return new java.sql.Date(date.getTime());
}
/**
* 方法 getDateString 得到指定样式的年月日
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param patternString
* 格式。如:yyyy-MM-dd HH:mm:ss EEE
* @return 格式化后的字符串
*/
public static String getDateString(int year, int month, int date,
String patternString) {
String dateString = "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
Date showDate = calendar.getTime();
dateString = formatter.format(showDate);
return dateString;
}
/**
* 方法 getDateString 得到指定样式的年月日, 对于非法数据返回当前日期样式
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param patternString
* 格式。如:yyyy-MM-dd HH:mm:ss EEE
* @return 格式化后的字符串
*/
public static String getDateString(String year, String month, String date,
String patternString) {
return getDateString(year, month, date, patternString, true);
}
public static String getDateString(String year, String month, String date,
String patternString, boolean hasDefault) {
String dateString = "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
if (hasDefault)
dateString = formatter.format(new Date());
try {
int y = Integer.parseInt(year);
int m = Integer.parseInt(month);
int d = Integer.parseInt(date);
dateString = getDateString(y, m, d, patternString);
} catch (Exception e) {
}
return dateString;
}
public static String getDateString(String date, String patternString) {
if (date == null)
return "";
if (date.length() < 10)
return "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString,
Locale.ENGLISH);
return formatter.format(getDate(date));
}
/**
* Convert a date object to String with specified format. See API document
* of java.text.SimpleDateFormat for detail description of format pattern.
* Return empty string if parameter date is null.
*
* @param _date
* @param patternString
* @return String
*/
public static String getDateString(Date _date, String patternString) {
String dateString = "";
if (_date != null) {
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
dateString = formatter.format(_date);
}
return dateString;
}
public static String getBeforeMonth(int monthCount) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, monthCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(_date);
}
public static String getHoursOfDay(String day) {
String st = "";
try {
st = Float.parseFloat(day) * 24 + "";
} catch (NumberFormatException ex) {
}
return st;
}
public static String getDayOfHours(String hours) {
String st = "";
try {
st = (Float.parseFloat(hours) / 24.0) + "";
} catch (NumberFormatException ex) {
}
return st;
}
/**
* 方法 getAfterDate 得到与指定日期相差指定天数的日期
*
* @param patternString
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前或向后的天数,向后为正数,向前为负值
* @return String 处理后的日期字符串
*/
public static String getAfterToday(int dayCount, String patternString) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, dayCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
String dateString = formatter.format(_date);
return dateString;
}
/**
* 将string类型转换为date类型
*
* @param dateStr
* 2007-10-10
* @return
* @throws Exception
*/
public static Date getDateByString(String dateStr) {
try {
return getDate(dateStr, "yyyy-MM-dd");
} catch (Exception e) {
return null;
}
}
public static String getCurrentDate(String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
String date = formatter.format(new Date(System.currentTimeMillis()));
return date;
}
public static String getDateStr(String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
String date = "";
date = formatter.format(new Date(System.currentTimeMillis()));
return date;
}
/**
* 将字符日期型数据按照指定的格式解析成日期对象
*
* @param dateStr
* 2007-10-10 / 2007/10/10
* @param patten
* yyyy-MM-dd / yyyy/MM/dd
* @return
*/
public static Date getDate(String dateStr, String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
try {
return formatter.parse(dateStr);
} catch (ParseException e) {
return null;
}
}
/**
* 获得格式化日期之后的 long数据值
*
* @param dateStr
* @param patten
* @return
* @throws Exception
*/
public static long getDateOfLong(String dateStr, String patten)
throws Exception {
return getDate(dateStr, patten).getTime();
}
/**
* 获得格式化日期之后的 String数据值
*
* @param dateLong
* @param patten
* @return
* @throws Exception
*/
public static String getDateOfString(Long dateLong, String patten)
throws Exception {
if (dateLong != null) {
return (new SimpleDateFormat(patten).format(new Date(dateLong
.longValue()))).toString();
}
return "";
}
/**
* 将string的日期类型转换为long类型
*
* @param dateStr
* 2007-10-10
* @return
* @throws Exception
*/
public static long getDateOfLong(String dateStr) throws Exception {
Date dt = getDateByString(dateStr);
return dt.getTime();
}
/**
* 获得long型当前日期
*
* @return
* @throws Exception
*/
public static long getCurrenTimeOfLong() {
Calendar calendar = Calendar.getInstance();
return calendar.getTime().getTime();
}
/**
* Convert java.util.Date object to java.sql.Date object.
*
* @param date
* @return Date
*/
public static java.sql.Date UtilDateToSQLDate(Date date) {
return new java.sql.Date(date.getTime());
}
/**
* 验证输入的文本信息日期是否合法
*
* @param inputDate
* @return
*/
public static Date isDate(String dateStr) {
String date_format_1 = "yyyy/MM/dd";
String date_format_2 = "yyyy-MM-dd";
String date_format_3 = "yyyyMMdd";
String date_format_4 = "yyyy.MM.dd";
String[] date_format = { date_format_1, date_format_2, date_format_3,
date_format_4 };
for (int i = 0; i < date_format.length; i++) {
try {
SimpleDateFormat formatDate = new SimpleDateFormat(
date_format[i]);
formatDate.setLenient(false);
ParsePosition pos = new java.text.ParsePosition(0);
Date tempDate = formatDate.parse(dateStr, pos);
tempDate.getTime();
return tempDate;
} catch (Exception e) {
}
}
return null;
}
/**
* <p>
* 返回calendar ,传入date
* </p>
*
* @author Jack Zhou
* @version $Id: DateUtil.java,v 0.1 Jul 2, 2008 12:36:59 PM Jack Exp $
*/
public static Calendar getCalendar(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);
return cal;
}
/**
* <p>
* 返回时分秒的long类型
* </p>
*
* @author Jack Zhou
* @version $Id: DateUtil.java,v 0.1 Jul 2, 2008 12:36:39 PM Jack Exp $
*/
public static Long getHMSLong(Calendar c) {
int ap = c.get(Calendar.AM_PM);
int h = c.get(Calendar.HOUR);
if (ap == 1)
h = h + 12;
int m = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
return (long) (s + m * 60 + h * 60 * 60);
}
public static boolean compare(String hm) throws Exception {
Date dat = getDate(getDateString(new Date(), "yyyyMMdd") + " " + hm,
"yyyyMMdd HH:mm");
if (new Date().getTime() > dat.getTime()) {
return true;
} else {
return false;
}
}
public static Date getDateFromStr(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(4, 6));
int date = Integer.parseInt(baseDate.substring(6, 8));
int hour = 0;
int minute = 0;
int second = 0;
if (baseDate.length() >= 10)
hour = Integer.parseInt(baseDate.substring(8, 10));
if (baseDate.length() >= 12)
minute = Integer.parseInt(baseDate.substring(10, 12));
if (baseDate.length() >= 14)
second = Integer.parseInt(baseDate.substring(12, 14));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
public static void main(String[] args) throws Exception {
Date date = DateUtil.getDateFromStr("20090304005743");
System.out.println(DateUtil.getDateString(date,
DateUtil.FILE_INDENTIFY_FORMAT));
}
}