时间处理工具类(DateUtil)
来源:互联网 发布:三维软件开发平台 编辑:程序博客网 时间:2024/05/15 23:39
package com.lvmama.comm.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.lvmama.comm.vo.Constant;
/**
*
* @author yuzhibing
*
*/
public class DateUtil {
public static String[] MONTHS = new String[] { "一月", "二月", "三月", "四月",
"五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
private static int[] DOMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 };
private static int[] lDOMonth = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 };
public static final String PATTERN_yyyy_MM_dd = "yyyy-MM-dd";
public static final String PATTERN_yyyyMMdd = "yyyyMMdd";
public static final String PATTERN_MMdd = "MM-dd";
public static final String PATTERN_yyMMdd = "yy/MM/dd";
public static final String PATTERN_yyyyMMddHHmmss = "yyyyMMddHHmmss";
public static final String PATTERN_yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
public static final String PATTERN_yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
public static final String PATTERN_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
public static final String PATTERN_HH_mm_ss = "HH:mm:ss";
public static final String PATTERN_HHmmss = "HHmmss";
public static final String PATTERN_yyyyMMdd_HHmmss = "yyyy/MM/dd HH:mm:ss";
public static final String PATTERN_yyyyMMdd2 = "yyyy/MM/dd";
static Log LOG = LogFactory.getLog(DateUtil.class);
/**
* 取日期是一个月中的几号.
*
* @param date
* @return
*/
public static int getDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Object day = cal.get(Calendar.DATE);
if (day != null) {
return Integer.valueOf(day.toString());
} else {
return 0;
}
}
/**
* 取日期是哪一年
*
* @param date
* @return
*/
public static int getYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Object year = cal.get(Calendar.YEAR);
if (year != null) {
return Integer.valueOf(year.toString());
} else {
return 0;
}
}
/**
* 判断两个时间的大小.
*
* @param startTime
* @param endTime
* @return
*/
public static boolean isCompareTime(Date startTime, Date endTime) {
if (endTime.getTime() > startTime.getTime()) {
return true;
} else {
return false;
}
}
/**
* 取日期是月份.
*
* @param date
* @return
*/
public static int getMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//cal.add(Calendar.MONTH, 1);
Object day = cal.get(Calendar.MONTH);
if (day != null) {
return Integer.valueOf(day.toString())+1;
} else {
return 0;
}
}
public static int getDaysOfmonth(int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, month);
if ((cal.get(Calendar.YEAR) % 4) == 0) {
if ((cal.get(Calendar.YEAR) % 100) == 0
&& (cal.get(Calendar.YEAR) % 400) != 0)
return DOMonth[cal.get(Calendar.MONTH)];
return lDOMonth[cal.get(Calendar.MONTH)];
} else
return DOMonth[cal.get(Calendar.MONTH)];
}
public static Calendar getClearCalendar() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
public static Date getDateAfterDays(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
return cal.getTime();
}
public static Date getDateAfter0000Date(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
cal.set(Calendar.HOUR_OF_DAY, 00);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
return cal.getTime();
}
public static Date getDateAfter2359Date(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
public static Date getDateBeforeHours(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, -duration);
return cal.getTime();
}
public static Date getDateAfterMinutes(long duration) {
long curr = System.currentTimeMillis();
curr = curr + duration * 60 * 1000;
return new Date(curr);
}
public static String formatDate(Date date, String format) {
return getFormatDate(date, format);
}
/**
* 格式时间
*
* @param date
* @param format
* @return
*/
public static String getFormatDate(Date date, String format) {
if (date != null) {
SimpleDateFormat f = new SimpleDateFormat(format);
return f.format(date);
} else {
return null;
}
}
public static String getZHDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
switch (calendar.get(Calendar.DAY_OF_WEEK)) {
case Calendar.MONDAY:
return "星期一";
case Calendar.TUESDAY:
return "星期二";
case Calendar.WEDNESDAY:
return "星期三";
case Calendar.THURSDAY:
return "星期四";
case Calendar.FRIDAY:
return "星期五";
case Calendar.SATURDAY:
return "星期六";
case Calendar.SUNDAY:
return "星期日";
default:
return "";
}
}
/**
* 当前日期小时相加或相减所得日期(+,-)操作,输入一个日期得到天数加减后的日期。
*
* @param cal
* @return
*/
public static Date DsDay_Hour(Date date, Integer hours) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR, hours);
return cal.getTime();
}
/**
* 把参数时间精确到天
*
* @param cal
* @return
*/
public static Date accurateToDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return clearDateAfterDay(cal);
}
public static int getDayOfWeek(Calendar cal) {// 得到每月1号是星期几
cal.set(Calendar.DATE, 1);
return cal.get(Calendar.DAY_OF_WEEK);
}
public static Date getTheMiddle(Date date, int plus) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(cal.DATE, 1);
cal.add(cal.MONTH, plus);
return cal.getTime();
}
public static Map<String, Object> getBeginAndEndDateByDate(Date date) {
Calendar calClearDate = Calendar.getInstance();
calClearDate.setTime(date);
calClearDate.set(calClearDate.DATE, 1);
date = calClearDate.getTime();
Map<String, Object> map = new HashMap<String, Object>();
// SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
int dayOfWeek = getDayOfWeek(cal);
cal.set(Calendar.DATE, -(dayOfWeek - 2));
map.put("beginDate", cal.getTime());
cal.add(Calendar.DATE, 21);
map.put("currPageDate", cal.getTime());
cal.add(Calendar.DATE, 20);
map.put("endDate", cal.getTime());
return map;
}
/**
* 根据格式获取日期字符串.
*
* @param format
* @param aDate
* @return
*/
public static String getDateTime(String format, Date aDate) {
SimpleDateFormat df = new SimpleDateFormat(format);
String returnValue = df.format(aDate);
return returnValue;
}
/**
* 当前日期分钟相加或相减所得日期(+,-)操作,输入一个日期得到分钟加减后的日期。
*
* @param months
* @return
*/
public static Date DsDay_Minute(Date date, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int minutes = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minutes + minute);
return calendar.getTime();
}
/**
* 当前日期秒钟相加或相减所得日期(+,-)操作,输入一个日期得到分钟加减后的日期。
*
* @param months
* @return
*/
public static Date DsDay_Second(Date date, int second) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int seconds = calendar.get(Calendar.SECOND);
calendar.set(Calendar.SECOND, seconds + second);
return calendar.getTime();
}
/**
* 清理所有天后面的日期时间
*
* @param c
* @return
*/
public static Date clearDateAfterDay(Calendar c) {
c.set(Calendar.MILLISECOND, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.HOUR_OF_DAY, 0);
return c.getTime();
}
/**
* String转Date
*
* @param sdate
* 日期字符串
* @param fmString
* 指定日期格式
* @return
*/
public static Date toDate(String sdate, String fmString) {
DateFormat df = new SimpleDateFormat(fmString);
try {
return df.parse(sdate);
} catch (ParseException e) {
throw new RuntimeException("日期格式不正确 ");
}
}
/**
* 根据出生日期得到年龄
*/
public static int getAge(Date birthDay) {
Calendar cal = Calendar.getInstance();
if (cal.before(birthDay)) {
return 0;
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;// 注意此处,如果不加1的话计算结果是错误的
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
if (monthNow < monthBirth
|| (monthNow == monthBirth && dayOfMonthNow < dayOfMonthBirth)) {
age--;
}
return age;
}
// 计算两个日期之间有多少天
public static int getDaysBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
/**
* 当前日期相加或相减所得日期(+,-)操作
*
* @param months
* @return Date
*/
public static Date dsDay_Date(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int days = calendar.get(Calendar.DATE);
calendar.set(Calendar.DATE, days + day);
Date cc = calendar.getTime();
return cc;
}
/**
* 取年.
*
* @param date
* @return
*/
public static String getFormatYear(Date date) {
String str = null;
if (date != null) {
str = DateFormatUtils.format(date, "yyyy");
}
return str;
}
public static List<Date> getDateList(Date beginDate, Date endDate) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
List<Date> dateList = new ArrayList<Date>();
dateList.add(beginDate);
while (true) {
if (clean(beginDate).equals(endDate)) {
break;
}
calendar.add(Calendar.DATE, 1);
Date currentDate = calendar.getTime();
dateList.add(currentDate);
if (currentDate.after(endDate)
|| clean(currentDate).equals(clean(endDate))) {
break;
}
}
return dateList;
}
/**
* 得到前一天晚上6点钟.
*
* @return
* @throws ParseException
*/
public static Date getYestoday18Hour() throws ParseException {
Date d = new Date();
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
ca.setTime(simpleOldDate.parse(simpleOldDate.format(d)));
ca.add(Calendar.DATE, -1);
ca.add(Calendar.HOUR, 18);
return ca.getTime();
}
private static Date clean(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date getAfterDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
ca.add(Calendar.DATE, 1);
return ca.getTime();
}
public static Date getBeforeDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
ca.add(Calendar.DATE, -1);
return ca.getTime();
}
public static Date getToDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
return ca.getTime();
}
/**
* 返回 该日期的开始处
*
* @param date
* @return
*/
public static Date getDayStart(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
public static Date getDayEnd(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 999);
return c.getTime();
}
/**
* 得到当前时间的23点.
*
* @param date
* @return
*/
public static Date getDayEndBeforeOneH(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
c.set(Calendar.MILLISECOND, 000);
return c.getTime();
}
/**
* date1是否早于date2
*
* @param date1
* @param date2
* @return
*/
public static boolean inAdvance(Date date1, Date date2) {
if (date1 == null || date2 == null) {
return false;
}
return date1.getTime() < date2.getTime();
}
/**
* 将日期和时分的两个时间合并到一起
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTime(Date date, Date time) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
Calendar timeCalendar = Calendar.getInstance();
timeCalendar.setTime(time);
dateCalendar.set(Calendar.HOUR, timeCalendar.get(Calendar.HOUR));
dateCalendar.set(Calendar.MINUTE, timeCalendar.get(Calendar.MINUTE));
dateCalendar.set(Calendar.SECOND, timeCalendar.get(Calendar.SECOND));
return dateCalendar.getTime();
}
public static Date getDateByStr(String dateStr, String formate) {
SimpleDateFormat sdf = new SimpleDateFormat(formate);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (Exception e) {
LOG.error(e);
}
return date;
}
/**
* 字符串转换到时间格式
*
* @param dateStr
* 需要转换的字符串
* @param formatStr
* 需要格式的目标字符串 举例 yyyy-MM-dd
* @return Date 返回转换后的时间
* @throws ParseException
* 转换异常
*/
public static Date stringToDate(String dateStr, String formatStr) {
DateFormat sdf = new SimpleDateFormat(formatStr);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
LOG.error(e);
}
return date;
}
/**
* 比较2个日期 前一个日期至少比后一个日期大一天以上
*
* @param date1
* @param date2
* @return
*/
public static boolean compareDateLessOneDayMore(Date date1, Date date2) {
Calendar c1 = Calendar.getInstance();
c1.setTime(date1);
Calendar c2 = Calendar.getInstance();
c2.setTime(date2);
if (c1.get(Calendar.YEAR) > c2.get(Calendar.YEAR)) {
return true;
} else if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.MONTH) > c2.get(Calendar.MONTH)) {
return true;
} else if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)
&& c1.get(Calendar.DATE) > c2.get(Calendar.DATE)) {
return true;
}
return false;
}
/**
* 将日期加年.
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTimeAddYear(Date date, Integer years) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
dateCalendar.set(dateCalendar.YEAR, dateCalendar.get(Calendar.YEAR)
+ years);
return dateCalendar.getTime();
}
/**
* 将日期加月.
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTimeAddMonth(Date date, Integer Months) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
dateCalendar.set(dateCalendar.MONTH, dateCalendar.get(Calendar.MONTH)
+ Months);
return dateCalendar.getTime();
}
public static Long getMinBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
Long min = 0L;
if (d1.getTimeInMillis() > d2.getTimeInMillis()) {
min = (d1.getTimeInMillis() - d2.getTimeInMillis()) / (1000 * 60);
} else {
min = (d2.getTimeInMillis() - d1.getTimeInMillis()) / (1000 * 60);
}
return min;
}
/**
* 相差秒数
* @param startDate
* @param endDate
* @return
*/
public static Long getMillisBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
Long min = 0L;
if (d1.getTimeInMillis() > d2.getTimeInMillis()) {
min = (d1.getTimeInMillis() - d2.getTimeInMillis())/1000;
} else {
min = (d2.getTimeInMillis() - d1.getTimeInMillis())/1000;
}
return min;
}
/**
* 主要是用于FAX_STRATEGY.
*
* @param date
* @param faxStrategy
* @return
* @see 此方法由com.lvmama.common.vo.Constant.FAX_STRATEGY.valueOf(faxStrategy).
* sendTime(Date)替代.
*/
@Deprecated
public static Date getSpecNameDate(Date date, String faxStrategy) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
if (Constant.FAX_STRATEGY.VISIT_DAY_8.name().equals(faxStrategy)) {
c.set(Calendar.HOUR_OF_DAY, 8);
return c.getTime();
} else if (Constant.FAX_STRATEGY.PREVIOUS_ONEDAY_12.name().equals(
faxStrategy)) {
c.add(Calendar.DATE, -1);
c.set(Calendar.HOUR_OF_DAY, 12);
return c.getTime();
} else if (Constant.FAX_STRATEGY.PREVIOUS_ONEDAY_16.name().equals(
faxStrategy)) {
c.add(Calendar.DATE, -1);
c.set(Calendar.HOUR_OF_DAY, 16);
return c.getTime();
} else {
return new Date();
}
}
/**
* 获取今天的日期,去掉时、分、秒
*/
public static Date getTodayYMDDate() {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);// 24小时制
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 得到今天几点
* @return
*/
public static int getTodayHourDate(){
Calendar cal = Calendar.getInstance();
int hour=cal.get(Calendar.HOUR_OF_DAY);
return hour;
}
/**
* 获取今天的日期yyyy-MM-dd格式
*
* @return
*/
public static Date getTodayDate() {
return stringToDate(formatDate(new Date(), "yyyy-MM-dd"), "yyyy-MM-dd");
}
/**
* 将分钟转成小时数,有小误差
*/
public static float convertToHours(Long minutes) {
if (minutes == null) {
return 0f;
}
String fStr = (new Float(minutes + "") / 60) + "";
String res = fStr.substring(0, fStr.lastIndexOf(".") + 2);
return Float.parseFloat(res);
}
public static void main(String[] args) {
System.out.println(minutesToDate(1l));
}
/**
* 将小时数转为分钟,有小误差
*/
public static long convertToMinutes(Float hours) {
if (hours == null) {
return 0l;
}
long h = hours.intValue() * 60;
Float f = (hours - new Float(hours.intValue())) * 60;
String fStr = f.toString();
return h + Long.parseLong(fStr.substring(0, fStr.indexOf(".")));
}
/**
* 年月日时分秒的日期转只有年月日的日期
*/
public static Date toYMDDate(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);// 24小时制
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 本月第一天
*/
public static Date getFirstdayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* 本月最后一天
*/
public static Date getLastdayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, value);
date = cal.getTime();
return date;
}
/**
* date 减去当前日期 . 剩余0天0时0分
*
* @return str
*/
public static String getRemainTimeByCurrentDate(Date date) {
String str = "剩余0天0时0分";
if (null != date) {
Date d = new Date();
long seconds = (date.getTime() - d.getTime()) / 1000;
if (seconds > 0) { // 秒
long day = seconds / (3600 * 24); // 天数
long house = (seconds % (3600 * 24)) / 3600; // 小时
long min = (seconds % (3600)) / 60;// 分
return "剩余" + day + "天" + house + "时" + min + "分";
}
}
return str;
}
/**
* 得到一个时间的具体日期 例如:两个月后的前一个星期 month = 3 ; day = -7
*
* @param DATE
* @return DATE
* @author zhongshuangxi
*/
public static Date getTimesByTimes(int Month, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, Month);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
/**
* 返回当前时间 毫秒
*
* @param date
* @return
*/
public static long getDateTime(String date) {
if (StringUtils.isEmpty(date)) {
return 0l;
}
Date d = toDate(date, "yyyy-MM-dd");
return d.getTime();
}
/**
* 比较2个日期 前一个日期至少比后一个日期大一天以上
* @param date1
* @param date2
* @return
*/
public static String compareDate(Date date1,Date date2){
if(date1==null || date2==null){
return null;
}
if(date1.getTime()-date2.getTime()<0){
return null;
}
long seconds = (date1.getTime()-date2.getTime()) / 1000;
Long day = seconds / (3600 * 24); // 天数
Long hour = (seconds % (3600 * 24)) / 3600; // 小时
Long min = (seconds % (3600)) / 60;// 分
String str="";
if(day>0){
str = str + day + "天";
}
if(hour>0){
str = str + hour + "小时";
}
if(min>0){
str = str +min + "分";
}
return str;
}
/**
* 在特定的日期上,加入特定的时间点,返回新的日期
* @param date 特定日期
* @param time 给入的时间点
* time 的格式举例:09:00
* @return
*/
public static Date defineDate(Date date, String time) throws Exception{
try {
String []strs = time.split(":");
int hour =Integer.parseInt(strs[0]);
int minute = Integer.parseInt(strs[1]);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
} catch (Exception e) {
throw new Exception("给入的时间点参数格式错误!");
}
}
public static List<Date> converFromString(String addition) {
String[] ds = addition.split(",");
List<Date> dateList = new ArrayList<Date>();
for (String d : ds) {
d = StringUtils.trimToNull(d);
if (d == null) {
continue;
}
try {
dateList.add(new SimpleDateFormat(PATTERN_yyyyMMdd).parse(d));
} catch (ParseException e) {
LOG.error(e);
}
}
Collections.sort(dateList);
return dateList;
}
public static String convertDate(Date specDate) {
return new SimpleDateFormat(PATTERN_yyyyMMdd).format(specDate);
}
public static Date converDateFromStr(String str) throws ParseException {
return new SimpleDateFormat(PATTERN_yyyyMMdd).parse(str);
}
public static Date converDateFromStr2(String str) throws ParseException {
return new SimpleDateFormat(PATTERN_yyyyMMdd2).parse(str);
}
public static Date converDateFromStr3(String str) throws ParseException {
if(StringUtil.isEmptyString(str)){
return new Date();
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = format.parse(str);
return date;
}
public static String convertDate3(Date specDate) {
String str = "";
try{
str = new SimpleDateFormat(PATTERN_yyyy_MM_dd).format(specDate);
}catch(Exception ex){
ex.printStackTrace();
}
return str;
}
public static Date getBeforeDayBySecond(int second) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - second);
return calendar.getTime();
}
public static List<String> getLimitDateByWeek(String beginDate,String endDate,String weeks){
List<String> dates = new ArrayList<String>();
Date begin = DateUtil.getDateByStr(beginDate, "yyyy-MM-dd");
Date end = DateUtil.getDateByStr(endDate, "yyyy-MM-dd");
while(!begin.after(end)){
Calendar c = Calendar.getInstance();
c.setTime(begin);
int day = c.get(Calendar.DAY_OF_WEEK)-1;
if(weeks.contains(""+day)){
dates.add(DateUtil.formatDate(begin, "yyyy-MM-dd"));
}
begin = DateUtil.dsDay_Date(begin, 1);
}
return dates;
}
/**
* 计算两个日期的天数
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(String smdate,String bdate){
long between_days=0;
try{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
between_days=(time2-time1)/(1000*3600*24);
}catch(Exception ex){
LOG.error(ex);
}
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 当前日期按月份相加之后所得日期
* @param date
* @param month
* @return
*/
public static Date getDate_Month(Date date, int month) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int monthTest = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, monthTest+month);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date cc = calendar.getTime();
return cc;
}
public static String minutesToDate(Long minutes) {
if(minutes == null) {
return "";
}
double time = (double)minutes;
int day = 0;
int hour = 0;
int minute = 0;
if (time > 0) {
day = (int)Math.ceil(time / 1440);
if (time % 1440 == 0) {
hour = 0;
minute = 0;
} else {
hour = (int)(1440 - time % 1440) / 60;
minute = (int)(1440 - time % 1440) % 60;
}
} else if (time < 0) {
time = -time;
hour = (int)time / 60;
minute = (int)time % 60;
}
String hourStr = "" + hour, minuteStr = "" + minute;
if (hour < 10)
hourStr = "0" + hour;
if (minute < 10)
minuteStr = "0" + minute;
return day + "天" + hourStr + "点" +minuteStr + "分";
}
public static String getLogTime(Date date) {
if (date != null) {
SimpleDateFormat logFormat = new SimpleDateFormat("MM月dd日 HH时mm分ss秒");
return logFormat.format(date);
}
return null;
}
// 计算两个日期之间有多少分钟
public static long getMinutesBetween(Date startDate, Date endDate) {
return (startDate.getTime() - endDate.getTime())/1000/60;
}
}
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.lvmama.comm.vo.Constant;
/**
*
* @author yuzhibing
*
*/
public class DateUtil {
public static String[] MONTHS = new String[] { "一月", "二月", "三月", "四月",
"五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
private static int[] DOMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 };
private static int[] lDOMonth = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 };
public static final String PATTERN_yyyy_MM_dd = "yyyy-MM-dd";
public static final String PATTERN_yyyyMMdd = "yyyyMMdd";
public static final String PATTERN_MMdd = "MM-dd";
public static final String PATTERN_yyMMdd = "yy/MM/dd";
public static final String PATTERN_yyyyMMddHHmmss = "yyyyMMddHHmmss";
public static final String PATTERN_yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
public static final String PATTERN_yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
public static final String PATTERN_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
public static final String PATTERN_HH_mm_ss = "HH:mm:ss";
public static final String PATTERN_HHmmss = "HHmmss";
public static final String PATTERN_yyyyMMdd_HHmmss = "yyyy/MM/dd HH:mm:ss";
public static final String PATTERN_yyyyMMdd2 = "yyyy/MM/dd";
static Log LOG = LogFactory.getLog(DateUtil.class);
/**
* 取日期是一个月中的几号.
*
* @param date
* @return
*/
public static int getDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Object day = cal.get(Calendar.DATE);
if (day != null) {
return Integer.valueOf(day.toString());
} else {
return 0;
}
}
/**
* 取日期是哪一年
*
* @param date
* @return
*/
public static int getYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Object year = cal.get(Calendar.YEAR);
if (year != null) {
return Integer.valueOf(year.toString());
} else {
return 0;
}
}
/**
* 判断两个时间的大小.
*
* @param startTime
* @param endTime
* @return
*/
public static boolean isCompareTime(Date startTime, Date endTime) {
if (endTime.getTime() > startTime.getTime()) {
return true;
} else {
return false;
}
}
/**
* 取日期是月份.
*
* @param date
* @return
*/
public static int getMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//cal.add(Calendar.MONTH, 1);
Object day = cal.get(Calendar.MONTH);
if (day != null) {
return Integer.valueOf(day.toString())+1;
} else {
return 0;
}
}
public static int getDaysOfmonth(int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, month);
if ((cal.get(Calendar.YEAR) % 4) == 0) {
if ((cal.get(Calendar.YEAR) % 100) == 0
&& (cal.get(Calendar.YEAR) % 400) != 0)
return DOMonth[cal.get(Calendar.MONTH)];
return lDOMonth[cal.get(Calendar.MONTH)];
} else
return DOMonth[cal.get(Calendar.MONTH)];
}
public static Calendar getClearCalendar() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
public static Date getDateAfterDays(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
return cal.getTime();
}
public static Date getDateAfter0000Date(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
cal.set(Calendar.HOUR_OF_DAY, 00);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
return cal.getTime();
}
public static Date getDateAfter2359Date(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, duration);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
public static Date getDateBeforeHours(Date date, int duration) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, -duration);
return cal.getTime();
}
public static Date getDateAfterMinutes(long duration) {
long curr = System.currentTimeMillis();
curr = curr + duration * 60 * 1000;
return new Date(curr);
}
public static String formatDate(Date date, String format) {
return getFormatDate(date, format);
}
/**
* 格式时间
*
* @param date
* @param format
* @return
*/
public static String getFormatDate(Date date, String format) {
if (date != null) {
SimpleDateFormat f = new SimpleDateFormat(format);
return f.format(date);
} else {
return null;
}
}
public static String getZHDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
switch (calendar.get(Calendar.DAY_OF_WEEK)) {
case Calendar.MONDAY:
return "星期一";
case Calendar.TUESDAY:
return "星期二";
case Calendar.WEDNESDAY:
return "星期三";
case Calendar.THURSDAY:
return "星期四";
case Calendar.FRIDAY:
return "星期五";
case Calendar.SATURDAY:
return "星期六";
case Calendar.SUNDAY:
return "星期日";
default:
return "";
}
}
/**
* 当前日期小时相加或相减所得日期(+,-)操作,输入一个日期得到天数加减后的日期。
*
* @param cal
* @return
*/
public static Date DsDay_Hour(Date date, Integer hours) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR, hours);
return cal.getTime();
}
/**
* 把参数时间精确到天
*
* @param cal
* @return
*/
public static Date accurateToDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return clearDateAfterDay(cal);
}
public static int getDayOfWeek(Calendar cal) {// 得到每月1号是星期几
cal.set(Calendar.DATE, 1);
return cal.get(Calendar.DAY_OF_WEEK);
}
public static Date getTheMiddle(Date date, int plus) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(cal.DATE, 1);
cal.add(cal.MONTH, plus);
return cal.getTime();
}
public static Map<String, Object> getBeginAndEndDateByDate(Date date) {
Calendar calClearDate = Calendar.getInstance();
calClearDate.setTime(date);
calClearDate.set(calClearDate.DATE, 1);
date = calClearDate.getTime();
Map<String, Object> map = new HashMap<String, Object>();
// SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
int dayOfWeek = getDayOfWeek(cal);
cal.set(Calendar.DATE, -(dayOfWeek - 2));
map.put("beginDate", cal.getTime());
cal.add(Calendar.DATE, 21);
map.put("currPageDate", cal.getTime());
cal.add(Calendar.DATE, 20);
map.put("endDate", cal.getTime());
return map;
}
/**
* 根据格式获取日期字符串.
*
* @param format
* @param aDate
* @return
*/
public static String getDateTime(String format, Date aDate) {
SimpleDateFormat df = new SimpleDateFormat(format);
String returnValue = df.format(aDate);
return returnValue;
}
/**
* 当前日期分钟相加或相减所得日期(+,-)操作,输入一个日期得到分钟加减后的日期。
*
* @param months
* @return
*/
public static Date DsDay_Minute(Date date, int minute) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int minutes = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minutes + minute);
return calendar.getTime();
}
/**
* 当前日期秒钟相加或相减所得日期(+,-)操作,输入一个日期得到分钟加减后的日期。
*
* @param months
* @return
*/
public static Date DsDay_Second(Date date, int second) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int seconds = calendar.get(Calendar.SECOND);
calendar.set(Calendar.SECOND, seconds + second);
return calendar.getTime();
}
/**
* 清理所有天后面的日期时间
*
* @param c
* @return
*/
public static Date clearDateAfterDay(Calendar c) {
c.set(Calendar.MILLISECOND, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.HOUR_OF_DAY, 0);
return c.getTime();
}
/**
* String转Date
*
* @param sdate
* 日期字符串
* @param fmString
* 指定日期格式
* @return
*/
public static Date toDate(String sdate, String fmString) {
DateFormat df = new SimpleDateFormat(fmString);
try {
return df.parse(sdate);
} catch (ParseException e) {
throw new RuntimeException("日期格式不正确 ");
}
}
/**
* 根据出生日期得到年龄
*/
public static int getAge(Date birthDay) {
Calendar cal = Calendar.getInstance();
if (cal.before(birthDay)) {
return 0;
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;// 注意此处,如果不加1的话计算结果是错误的
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
if (monthNow < monthBirth
|| (monthNow == monthBirth && dayOfMonthNow < dayOfMonthBirth)) {
age--;
}
return age;
}
// 计算两个日期之间有多少天
public static int getDaysBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
/**
* 当前日期相加或相减所得日期(+,-)操作
*
* @param months
* @return Date
*/
public static Date dsDay_Date(Date date, int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int days = calendar.get(Calendar.DATE);
calendar.set(Calendar.DATE, days + day);
Date cc = calendar.getTime();
return cc;
}
/**
* 取年.
*
* @param date
* @return
*/
public static String getFormatYear(Date date) {
String str = null;
if (date != null) {
str = DateFormatUtils.format(date, "yyyy");
}
return str;
}
public static List<Date> getDateList(Date beginDate, Date endDate) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
List<Date> dateList = new ArrayList<Date>();
dateList.add(beginDate);
while (true) {
if (clean(beginDate).equals(endDate)) {
break;
}
calendar.add(Calendar.DATE, 1);
Date currentDate = calendar.getTime();
dateList.add(currentDate);
if (currentDate.after(endDate)
|| clean(currentDate).equals(clean(endDate))) {
break;
}
}
return dateList;
}
/**
* 得到前一天晚上6点钟.
*
* @return
* @throws ParseException
*/
public static Date getYestoday18Hour() throws ParseException {
Date d = new Date();
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
ca.setTime(simpleOldDate.parse(simpleOldDate.format(d)));
ca.add(Calendar.DATE, -1);
ca.add(Calendar.HOUR, 18);
return ca.getTime();
}
private static Date clean(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date getAfterDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
ca.add(Calendar.DATE, 1);
return ca.getTime();
}
public static Date getBeforeDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
ca.add(Calendar.DATE, -1);
return ca.getTime();
}
public static Date getToDay(Date date) {
SimpleDateFormat simpleOldDate = new SimpleDateFormat(
"yyyy-MM-dd 00:00:00");
Calendar ca = Calendar.getInstance();
try {
ca.setTime(simpleOldDate.parse(simpleOldDate.format(date)));
} catch (ParseException e) {
ca.setTime(getDayStart(new Date()));
}
return ca.getTime();
}
/**
* 返回 该日期的开始处
*
* @param date
* @return
*/
public static Date getDayStart(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
public static Date getDayEnd(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 999);
return c.getTime();
}
/**
* 得到当前时间的23点.
*
* @param date
* @return
*/
public static Date getDayEndBeforeOneH(Date date) {
if (date == null)
return null;
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 00);
c.set(Calendar.SECOND, 00);
c.set(Calendar.MILLISECOND, 000);
return c.getTime();
}
/**
* date1是否早于date2
*
* @param date1
* @param date2
* @return
*/
public static boolean inAdvance(Date date1, Date date2) {
if (date1 == null || date2 == null) {
return false;
}
return date1.getTime() < date2.getTime();
}
/**
* 将日期和时分的两个时间合并到一起
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTime(Date date, Date time) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
Calendar timeCalendar = Calendar.getInstance();
timeCalendar.setTime(time);
dateCalendar.set(Calendar.HOUR, timeCalendar.get(Calendar.HOUR));
dateCalendar.set(Calendar.MINUTE, timeCalendar.get(Calendar.MINUTE));
dateCalendar.set(Calendar.SECOND, timeCalendar.get(Calendar.SECOND));
return dateCalendar.getTime();
}
public static Date getDateByStr(String dateStr, String formate) {
SimpleDateFormat sdf = new SimpleDateFormat(formate);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (Exception e) {
LOG.error(e);
}
return date;
}
/**
* 字符串转换到时间格式
*
* @param dateStr
* 需要转换的字符串
* @param formatStr
* 需要格式的目标字符串 举例 yyyy-MM-dd
* @return Date 返回转换后的时间
* @throws ParseException
* 转换异常
*/
public static Date stringToDate(String dateStr, String formatStr) {
DateFormat sdf = new SimpleDateFormat(formatStr);
Date date = null;
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
LOG.error(e);
}
return date;
}
/**
* 比较2个日期 前一个日期至少比后一个日期大一天以上
*
* @param date1
* @param date2
* @return
*/
public static boolean compareDateLessOneDayMore(Date date1, Date date2) {
Calendar c1 = Calendar.getInstance();
c1.setTime(date1);
Calendar c2 = Calendar.getInstance();
c2.setTime(date2);
if (c1.get(Calendar.YEAR) > c2.get(Calendar.YEAR)) {
return true;
} else if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.MONTH) > c2.get(Calendar.MONTH)) {
return true;
} else if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
&& c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)
&& c1.get(Calendar.DATE) > c2.get(Calendar.DATE)) {
return true;
}
return false;
}
/**
* 将日期加年.
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTimeAddYear(Date date, Integer years) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
dateCalendar.set(dateCalendar.YEAR, dateCalendar.get(Calendar.YEAR)
+ years);
return dateCalendar.getTime();
}
/**
* 将日期加月.
*
* @param date
* @param time
* @return
*/
public static Date mergeDateTimeAddMonth(Date date, Integer Months) {
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(date);
dateCalendar.set(dateCalendar.MONTH, dateCalendar.get(Calendar.MONTH)
+ Months);
return dateCalendar.getTime();
}
public static Long getMinBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
Long min = 0L;
if (d1.getTimeInMillis() > d2.getTimeInMillis()) {
min = (d1.getTimeInMillis() - d2.getTimeInMillis()) / (1000 * 60);
} else {
min = (d2.getTimeInMillis() - d1.getTimeInMillis()) / (1000 * 60);
}
return min;
}
/**
* 相差秒数
* @param startDate
* @param endDate
* @return
*/
public static Long getMillisBetween(Date startDate, Date endDate) {
Calendar d1 = Calendar.getInstance();
d1.setTime(startDate);
Calendar d2 = Calendar.getInstance();
d2.setTime(endDate);
Long min = 0L;
if (d1.getTimeInMillis() > d2.getTimeInMillis()) {
min = (d1.getTimeInMillis() - d2.getTimeInMillis())/1000;
} else {
min = (d2.getTimeInMillis() - d1.getTimeInMillis())/1000;
}
return min;
}
/**
* 主要是用于FAX_STRATEGY.
*
* @param date
* @param faxStrategy
* @return
* @see 此方法由com.lvmama.common.vo.Constant.FAX_STRATEGY.valueOf(faxStrategy).
* sendTime(Date)替代.
*/
@Deprecated
public static Date getSpecNameDate(Date date, String faxStrategy) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
if (Constant.FAX_STRATEGY.VISIT_DAY_8.name().equals(faxStrategy)) {
c.set(Calendar.HOUR_OF_DAY, 8);
return c.getTime();
} else if (Constant.FAX_STRATEGY.PREVIOUS_ONEDAY_12.name().equals(
faxStrategy)) {
c.add(Calendar.DATE, -1);
c.set(Calendar.HOUR_OF_DAY, 12);
return c.getTime();
} else if (Constant.FAX_STRATEGY.PREVIOUS_ONEDAY_16.name().equals(
faxStrategy)) {
c.add(Calendar.DATE, -1);
c.set(Calendar.HOUR_OF_DAY, 16);
return c.getTime();
} else {
return new Date();
}
}
/**
* 获取今天的日期,去掉时、分、秒
*/
public static Date getTodayYMDDate() {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);// 24小时制
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 得到今天几点
* @return
*/
public static int getTodayHourDate(){
Calendar cal = Calendar.getInstance();
int hour=cal.get(Calendar.HOUR_OF_DAY);
return hour;
}
/**
* 获取今天的日期yyyy-MM-dd格式
*
* @return
*/
public static Date getTodayDate() {
return stringToDate(formatDate(new Date(), "yyyy-MM-dd"), "yyyy-MM-dd");
}
/**
* 将分钟转成小时数,有小误差
*/
public static float convertToHours(Long minutes) {
if (minutes == null) {
return 0f;
}
String fStr = (new Float(minutes + "") / 60) + "";
String res = fStr.substring(0, fStr.lastIndexOf(".") + 2);
return Float.parseFloat(res);
}
public static void main(String[] args) {
System.out.println(minutesToDate(1l));
}
/**
* 将小时数转为分钟,有小误差
*/
public static long convertToMinutes(Float hours) {
if (hours == null) {
return 0l;
}
long h = hours.intValue() * 60;
Float f = (hours - new Float(hours.intValue())) * 60;
String fStr = f.toString();
return h + Long.parseLong(fStr.substring(0, fStr.indexOf(".")));
}
/**
* 年月日时分秒的日期转只有年月日的日期
*/
public static Date toYMDDate(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);// 24小时制
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 本月第一天
*/
public static Date getFirstdayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* 本月最后一天
*/
public static Date getLastdayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, value);
date = cal.getTime();
return date;
}
/**
* date 减去当前日期 . 剩余0天0时0分
*
* @return str
*/
public static String getRemainTimeByCurrentDate(Date date) {
String str = "剩余0天0时0分";
if (null != date) {
Date d = new Date();
long seconds = (date.getTime() - d.getTime()) / 1000;
if (seconds > 0) { // 秒
long day = seconds / (3600 * 24); // 天数
long house = (seconds % (3600 * 24)) / 3600; // 小时
long min = (seconds % (3600)) / 60;// 分
return "剩余" + day + "天" + house + "时" + min + "分";
}
}
return str;
}
/**
* 得到一个时间的具体日期 例如:两个月后的前一个星期 month = 3 ; day = -7
*
* @param DATE
* @return DATE
* @author zhongshuangxi
*/
public static Date getTimesByTimes(int Month, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, Month);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
/**
* 返回当前时间 毫秒
*
* @param date
* @return
*/
public static long getDateTime(String date) {
if (StringUtils.isEmpty(date)) {
return 0l;
}
Date d = toDate(date, "yyyy-MM-dd");
return d.getTime();
}
/**
* 比较2个日期 前一个日期至少比后一个日期大一天以上
* @param date1
* @param date2
* @return
*/
public static String compareDate(Date date1,Date date2){
if(date1==null || date2==null){
return null;
}
if(date1.getTime()-date2.getTime()<0){
return null;
}
long seconds = (date1.getTime()-date2.getTime()) / 1000;
Long day = seconds / (3600 * 24); // 天数
Long hour = (seconds % (3600 * 24)) / 3600; // 小时
Long min = (seconds % (3600)) / 60;// 分
String str="";
if(day>0){
str = str + day + "天";
}
if(hour>0){
str = str + hour + "小时";
}
if(min>0){
str = str +min + "分";
}
return str;
}
/**
* 在特定的日期上,加入特定的时间点,返回新的日期
* @param date 特定日期
* @param time 给入的时间点
* time 的格式举例:09:00
* @return
*/
public static Date defineDate(Date date, String time) throws Exception{
try {
String []strs = time.split(":");
int hour =Integer.parseInt(strs[0]);
int minute = Integer.parseInt(strs[1]);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
} catch (Exception e) {
throw new Exception("给入的时间点参数格式错误!");
}
}
public static List<Date> converFromString(String addition) {
String[] ds = addition.split(",");
List<Date> dateList = new ArrayList<Date>();
for (String d : ds) {
d = StringUtils.trimToNull(d);
if (d == null) {
continue;
}
try {
dateList.add(new SimpleDateFormat(PATTERN_yyyyMMdd).parse(d));
} catch (ParseException e) {
LOG.error(e);
}
}
Collections.sort(dateList);
return dateList;
}
public static String convertDate(Date specDate) {
return new SimpleDateFormat(PATTERN_yyyyMMdd).format(specDate);
}
public static Date converDateFromStr(String str) throws ParseException {
return new SimpleDateFormat(PATTERN_yyyyMMdd).parse(str);
}
public static Date converDateFromStr2(String str) throws ParseException {
return new SimpleDateFormat(PATTERN_yyyyMMdd2).parse(str);
}
public static Date converDateFromStr3(String str) throws ParseException {
if(StringUtil.isEmptyString(str)){
return new Date();
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = format.parse(str);
return date;
}
public static String convertDate3(Date specDate) {
String str = "";
try{
str = new SimpleDateFormat(PATTERN_yyyy_MM_dd).format(specDate);
}catch(Exception ex){
ex.printStackTrace();
}
return str;
}
public static Date getBeforeDayBySecond(int second) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - second);
return calendar.getTime();
}
public static List<String> getLimitDateByWeek(String beginDate,String endDate,String weeks){
List<String> dates = new ArrayList<String>();
Date begin = DateUtil.getDateByStr(beginDate, "yyyy-MM-dd");
Date end = DateUtil.getDateByStr(endDate, "yyyy-MM-dd");
while(!begin.after(end)){
Calendar c = Calendar.getInstance();
c.setTime(begin);
int day = c.get(Calendar.DAY_OF_WEEK)-1;
if(weeks.contains(""+day)){
dates.add(DateUtil.formatDate(begin, "yyyy-MM-dd"));
}
begin = DateUtil.dsDay_Date(begin, 1);
}
return dates;
}
/**
* 计算两个日期的天数
* @param smdate
* @param bdate
* @return
* @throws ParseException
*/
public static int daysBetween(String smdate,String bdate){
long between_days=0;
try{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
between_days=(time2-time1)/(1000*3600*24);
}catch(Exception ex){
LOG.error(ex);
}
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 当前日期按月份相加之后所得日期
* @param date
* @param month
* @return
*/
public static Date getDate_Month(Date date, int month) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int monthTest = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, monthTest+month);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date cc = calendar.getTime();
return cc;
}
public static String minutesToDate(Long minutes) {
if(minutes == null) {
return "";
}
double time = (double)minutes;
int day = 0;
int hour = 0;
int minute = 0;
if (time > 0) {
day = (int)Math.ceil(time / 1440);
if (time % 1440 == 0) {
hour = 0;
minute = 0;
} else {
hour = (int)(1440 - time % 1440) / 60;
minute = (int)(1440 - time % 1440) % 60;
}
} else if (time < 0) {
time = -time;
hour = (int)time / 60;
minute = (int)time % 60;
}
String hourStr = "" + hour, minuteStr = "" + minute;
if (hour < 10)
hourStr = "0" + hour;
if (minute < 10)
minuteStr = "0" + minute;
return day + "天" + hourStr + "点" +minuteStr + "分";
}
public static String getLogTime(Date date) {
if (date != null) {
SimpleDateFormat logFormat = new SimpleDateFormat("MM月dd日 HH时mm分ss秒");
return logFormat.format(date);
}
return null;
}
// 计算两个日期之间有多少分钟
public static long getMinutesBetween(Date startDate, Date endDate) {
return (startDate.getTime() - endDate.getTime())/1000/60;
}
}
1 0
- 时间处理工具类(DateUtil)
- DateUtil(时间处理函数工具)
- 时间工具类[DateUtil]
- 时间工具类(DateUtil)
- 时间工具类(DateUtil)
- 时间工具类(DateUtil)
- 时间工具类[DateUtil] 2
- [Utils]时间工具类--DateUtil
- DateUtil时间转换工具类
- DateUtil工具类时间戳类型转换
- 时间工具类,DateUtil各种好用
- java Date时间格式工具类DateUtil
- java 日期处理工具类 DateUtil
- java 日期处理工具类 DateUtil 2
- java 日期处理工具类 DateUtil
- Python学习:时间处理工具--dateutil两个简单用法
- 关于日期时间操作工具类DateUtil(三) -----对系统时间的操作.
- 21.Android 时间工具DateUtil
- Mac下编译chrome - iOS版
- 数组类模板
- C# 右下角弹出窗口
- Android学习之路
- sql server charindex函数和patindex函数详解(转)
- 时间处理工具类(DateUtil)
- PHP 遍历对象
- Java中ArrayList和LikedList的区别
- 正则表示式验证名字,手机号
- 讯飞语音开发之文本理解
- 趣味小算法之递归
- oracle 安装步骤 登录 导入表 详细步骤
- Qt程序分析_broadcastUDP
- linux apr安装