/**
* <h3>Class description</h3>
* <h4>日期处理类</h4>
*
* <h4>Special Notes</h4>
*
*
* @ver 0.1
* @author terry.wei
* 2011-5-4
*/
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import org.jfree.util.Log;
import com.opensymphony.xwork2.ActionContext;
public class DateUtil {
/**
* 一天中的天数
*/
public static long millionSecondsOfDay = 86400000;
public final static String YYYYMMDD24HHMMSS = "yyyy-MM-dd HH:mm:ss";
public final static String YYMMDD24HHMMSSSSS = "yyMMddHHmmssSSS";
/**
* 得到两个日期之间的天数,两头不算,取出数据后,可以根据需要再加
*
* @author Vincent
* @param date1
* @param date2
* @return
*/
public static int getDay(Date date1, Date date2) {
Long d2 = date2.getTime();
Long d1 = date1.getTime();
return (int) ((d2 - d1) / millionSecondsOfDay);
}
/**
* 计算日期加天数
*
* @author Vincent
* @param date
* @param days
* @return
*/
public static Date addDay(Date date, int days) {
Calendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.DAY_OF_MONTH, days);
return c.getTime();
}
/**
* 根据指定日期格式格式化日期
*
* @author Vincent
* @param date
* @param formater
* @return
*/
public static String format(Date date, String formater) {
SimpleDateFormat sdf = new SimpleDateFormat(formater);
return sdf.format(date);
}
/**
* 格式化日期
*
* @author Vincent
* @param date
* @param formater
* @return
*/
public static Date parse(String date, String formater) {
SimpleDateFormat sdf = new SimpleDateFormat(formater);
Date result = null;
try {
result = sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* 根据日期取出是星期几
*
* @author Vincent
* @param date
* Date
* @return int 返回1-7
*/
public static int getWeekOfDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return (calendar.get(Calendar.DAY_OF_WEEK) - 1) == 0 ? 7 : calendar.get(Calendar.DAY_OF_WEEK) - 1;
}
/**
* format "yyyy-MM-dd HH:mm:ss"
*/
public static String dateToString(Date date, String format) {
if (date == null)
return null;
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.format(date).trim();
}
/**
* 取Java虚拟机系统时间, 下一天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateNext(Date date) {
Calendar cl = Calendar.getInstance();
cl.setTime(date);
cl.add(Calendar.DATE, 1);
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
}
/**
* 取Java虚拟机系统时间, 上一月
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateNext() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
if (cl.get(Calendar.MONTH) + 2 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 2);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 2);
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
}
/**
* 取Java虚拟机系统时间, 上一月
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateNextByDate(Date date) {
Calendar cl = Calendar.getInstance();
cl.setTime(date);
String monthValue = "";
if (cl.get(Calendar.MONTH) + 2 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 2);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 2);
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
}
/**
* 取Java虚拟机系统时间, 当天月
*
* @param selectMonthDate
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringTodayDate(Date selectMonthDate) {
Calendar cl = Calendar.getInstance();
cl.setTime(selectMonthDate);
String monthValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
}
/**
* 取Java虚拟机系统时间, 前一月
*
* @param selectMonthDate
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateBack(Date selectMonthDate) {
Calendar cl = Calendar.getInstance();
cl.setTime(selectMonthDate);
String monthValue = "";
if (cl.get(Calendar.MONTH) < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH));
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + 01;
}
/**
* 取Java虚拟机系统时间, 返回当前时间戳
*
* @return Timestamp类型的时间
*/
public static Timestamp getSysTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
private static String getDate(Date date, int dif) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, dif);
String monthValue;
String dateValue;
if (calendar.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (calendar.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(calendar.get(Calendar.MONTH) + 1);
}
if (calendar.get(Calendar.DATE) < 10) {
dateValue = "0" + (calendar.get(Calendar.DATE));
} else {
dateValue = String.valueOf(calendar.get(Calendar.DATE));
}
return calendar.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
}
/**
* 取Java虚拟机系统时间, 下一天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateNextByDate(String strDate) {
Calendar cl = Calendar.getInstance();
cl.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
cl.add(Calendar.DATE, 1);
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
}
/**
* 取Java虚拟机系统时间, 前一天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateBackByDate(String strDate) {
Calendar cl = Calendar.getInstance();
cl.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
cl.add(Calendar.DATE, -1);
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
}
/**
* 取Java虚拟机系统时间, 当天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateBackByDate() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + 12 + "-" + 31;
}
/**
* 取Java虚拟机系统时间, 当天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDate() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
}
/**
* 取Java虚拟机系统时间, 当天时间 与星期几
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringDateByWeek() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
String dateString = cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue;
String weekString = "";
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
try {
weekString = DateUtil.getD(format1.parse(dateString));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return weekString + " " + dateString;
}
/**
* 获取星期几
*
* @return
*/
public static String getD(Date d) {
Locale localLanguage = ActionContext.getContext().getLocale();
String languageValue = localLanguage.getLanguage();
java.text.SimpleDateFormat f;
if (languageValue != null && (languageValue.toUpperCase().indexOf("CN") >= 0 || languageValue.toUpperCase().indexOf("ZH") >= 0 || languageValue.toUpperCase().indexOf("zh_CN") >= 0)) {
f = new java.text.SimpleDateFormat("EEEE", Locale.SIMPLIFIED_CHINESE);
} else {
f = new java.text.SimpleDateFormat("EEEE", Locale.US);
}
return f.format(d);
}
/**
* 年月日时分秒
*
* @return
*/
public static String getSysStringYYYYMMDDHHMMSSDate() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "-" + monthValue + "-" + dateValue + " " + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE);
}
/**
* 取Java虚拟机系统时间, 当天时间
*
* @return 只返回String格式的日期,YYYY-MM-DD, 长10位
*/
public static String getSysStringYear() {
Calendar cl = Calendar.getInstance();
cl.setTime(new Date());
String monthValue = "";
String dateValue = "";
if (cl.get(Calendar.MONTH) + 1 < 10) {
monthValue = "0" + (cl.get(Calendar.MONTH) + 1);
} else {
monthValue = String.valueOf(cl.get(Calendar.MONTH) + 1);
}
if (cl.get(Calendar.DATE) < 10) {
dateValue = "0" + (cl.get(Calendar.DATE));
} else {
dateValue = String.valueOf(cl.get(Calendar.DATE));
}
return cl.get(Calendar.YEAR) + "";
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 获得当前日期与本周一相差的天数
private static int getMondayPlus(String strDate) {
Calendar cd = Calendar.getInstance();
cd.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1) {
return -6;
} else {
return 2 - dayOfWeek;
}
}
// 获得上周星期一的日期
public static String getPreviousMonday(String strDate) {
int mondayPlus = getMondayPlus(strDate);
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * -1);
Date monday = currentDate.getTime();
return DateUtil.format(monday, "yyyy-MM-dd");
}
// 获得本周星期一的日期
public static String getCurrentMonday(String strDate) {
int mondayPlus = getMondayPlus(strDate);
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
return DateUtil.format(monday, "yyyy-MM-dd");
}
// 获得下周星期一的日期
public static String getNextMonday(String strDate) {
int mondayPlus = getMondayPlus(strDate);
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.setTime(DateUtil.parse(strDate, "yyyy-MM-dd"));
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * 1);
Date monday = currentDate.getTime();
return DateUtil.format(monday, "yyyy-MM-dd");
}
/**
* 获取本周周一
*
* @param date
* @return
*/
public static String getCurrentWeekMon(Date date) {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance(); // 获取日历
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 将日历翻到这周的周一
return sf.format(calendar.getTime());
}
/**
* 获取本周周日
*
* @param date
* @return
*/
public static String getCurrentWeekSun(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayofweek = c.get(Calendar.DAY_OF_WEEK) - 1;
if (dayofweek == 0)
dayofweek = 7;
c.add(Calendar.DATE, -dayofweek + 7);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(c.getTime());
}
/**
* 获取前一个月的日期
*
* @return 前一个月的日期
*/
public static String getTodayBeforeMonth() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date currentTime = new Date();// 得到当前系统时间
long now = currentTime.getTime();// 返回自 1970 年 1 月 1 日 00:00:00 GMT
// 以来此Date 对象表示毫秒数
currentTime = new Date(now - 86400000 * 24);
long now1 = currentTime.getTime();
currentTime = new Date(now1 - 86400000 * 6);
String current = formatter.format(currentTime);
return current;
}
/**
* 计算两个时间之差
*
* @param MaxDate
* @param MinDate
* @return
*/
public static String calculateCostTime(Date MaxDate, Date MinDate) {
String returnValue = "";
if (MinDate != null && !"".equals(MinDate)) {
long number = (MaxDate.getTime() - MinDate.getTime()) / 1000;
if (number >= 0 && number < 60) {
returnValue = String.valueOf(number) + " seconds";
} else if (number >= 60 && number < 3600) {
long minute = number / 60;
returnValue = String.valueOf(minute) + " minutes";
} else {
long allMinute = number / 60;
int hour = (int) (allMinute / 60);
long minute = allMinute - (hour * 60);
String hoursStr = "";
if (hour <= 1) {
hoursStr = " hour ";
} else {
hoursStr = " hours ";
}
returnValue = hour + hoursStr + minute + " minutes";
}
}
return returnValue;
}
/**
* 获取下个月的第一天
*
* @param date
* @return
*/
public static Date getNextFirstDate(Date date) {
GregorianCalendar nextFirstDay = new GregorianCalendar(new Integer(format(date, "yyyy")).intValue(), new Integer(format(date, "MM")).intValue() - 1, 1);
nextFirstDay.add(GregorianCalendar.MONTH, 1);
return nextFirstDay.getTime();
}
/**
* 该月最后一天(不必管每月多少天了)
*
* @param date
* @return
*/
public static Date getLastDay(Date date) {
GregorianCalendar lastDay = new GregorianCalendar(new Integer(format(date, "yyyy")).intValue(), new Integer(format(date, "MM")).intValue() - 1, 1);
lastDay.add(GregorianCalendar.MONTH, 1);
lastDay.add(GregorianCalendar.DATE, -1);
return lastDay.getTime();
}
/**
* 英國時間轉中國
*
* @param date
* @return
*/
public static String formatChinaDate(String englishDate, String englishFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(englishFormat, Locale.ENGLISH);
long millionSeconds;
Date date = null;
try {
millionSeconds = sdf.parse(englishDate).getTime();
date = new Date(millionSeconds);
sdf = new SimpleDateFormat("yyyy-MM-dd");
} catch (ParseException e) {
Log.error(e);
}
return sdf.format(date);
}
/**
* 中國時間轉英國
*
* @param date
* @return
*/
public static String formatEnglishDate(String chinaDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
long millionSeconds;
Date date = null;
try {
millionSeconds = sdf.parse(chinaDate).getTime();
date = new Date(millionSeconds);
sdf = new SimpleDateFormat("ddMMMyy", Locale.ENGLISH);
} catch (ParseException e) {
Log.error(e);
}
return sdf.format(date);
}
}