Java日期常用操作

来源:互联网 发布:网页美工培训学校 编辑:程序博客网 时间:2024/05/02 04:17

/**
 * 时间工具类
 * 
 * @author : 
 * @createTime : 2015年3月16日 上午10:45:48
 * @version : 1.0
 * @description :
 *
 */
public class DateUtils extends org.apache.commons.lang.time.DateUtils {


/**
* 将日值字符串转换成Date类型

* @param str
*            参数字符串
* @param format
*            格式
* @return Date
*/
public static Date parseDateString(String str, String format) {
if (str == null || str.equals("")) {
return null;
}
Date dt = null;
try {
DateFormat df = new SimpleDateFormat(format);
dt = df.parse(str);


} catch (Exception pe) {
}


return dt;
}


/**
* 调整时间 将指定日期调整 时间

* @param date
*            参数日期
* @param field
*            自定字段域
* @param amount
*            调整数量
* @param format
*            字符串格式
* @return String
*/
public static Date getAdjustDate(Date date, int field, int amount) {
if (date == null) {
return null;
}
Calendar can = Calendar.getInstance();
can.setTime(date);
can.add(field, amount);
Date newDate = can.getTime();
return newDate;
}


/**
* 取2个时间相差的天数

* @param date1
* @param date2
* @param isAbs
*            true:取绝对值 false:差值可能是负数
* @return
* @throws Exception
*/
public static long getBetweenDiffDay(Date date1, Date date2, boolean isAbs) throws Exception {
long date1Value = date1.getTime();
long date2Value = date2.getTime();
long diff = (date1Value - date2Value) / (24 * 3600 * 1000);
if (isAbs) {
return Math.abs(diff);
} else {
return diff;
}


}


/**
* 取2个时间相差的小时数

* @param date1
* @param date2
* @param isAbs
*            true:取绝对值 false:差值可能是负数
* @return
* @throws Exception
*/
public static long getBetweenDiffHour(Date date1, Date date2, boolean isAbs) throws Exception {
long date1Value = date1.getTime();
long date2Value = date2.getTime();
long diff = (date1Value - date2Value) / (3600 * 1000);
if (isAbs) {
return Math.abs(diff);
} else {
return diff;
}
}

/**
* 取2个时间相差的分钟数

* @param date1
* @param date2
* @param isAbs
*            true:取绝对值 false:差值可能是负数
* @return
* @throws Exception
*/
public static long getBetweenDiffMinute(Date date1, Date date2, boolean isAbs) throws Exception {
long date1Value = date1.getTime();
long date2Value = date2.getTime();
long diff = (date1Value - date2Value) / (60 * 1000);
if (isAbs) {
return Math.abs(diff);
} else {
return diff;
}
}

/**
* 获取两个时间相差剩余的天数小时分钟秒
* @param date1
* @param date2
* @return
*
* @author : weihui
* @createTime : 2015年5月8日 下午4:44:17
*/
public static Map<String,Integer> getBetweenDiffRemanentInfo(Date date1, Date date2){
long time = date1.getTime() - date2.getTime();
int day = (int) (time / (24 * 60 * 60 * 1000l));
int hour = (int) ((time - day * 24 * 60 * 60 * 1000l)/ (60 * 60 * 1000l));
int minute = (int) ((time - day * 24 * 60 * 60 * 1000l - hour * 60 * 60 * 1000l) / (60 * 1000l));
int second = (int) ((time - day * 24 * 60 * 60 * 1000l - hour * 60 * 60 * 1000l - minute * 60 * 1000l) / 1000l);
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("day", day);
map.put("hour", hour);
map.put("minute", minute);
map.put("second", second);
return map;
}

public static void main(String[] args) throws Exception {
Date date1 = new Date();
Date date2 = DateFormatUtils.format("2015-05-08 16:35", "yyyy-MM-dd HH:mm");
System.out.println(getBetweenDiffDay(date1, date2, true));
System.out.println(getBetweenDiffHour(date1, date2, true));
System.out.println(getBetweenDiffMinute(date1, date2, true));
}


/**
* 得到指定日期所在月的最后一天,如果给定时间是月末,返回值应该是下个月末

* @param date
* @return Date
*/
public static Date getMonthEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明给定时间是月末,返回值应该是下个月末
if (can.get(Calendar.DAY_OF_MONTH) == can.getActualMaximum(Calendar.DAY_OF_MONTH)) {
can.add(Calendar.MONTH, 1);
}
can.set(Calendar.DAY_OF_MONTH, can.getActualMaximum(Calendar.DAY_OF_MONTH));
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);


return can.getTime();
}


/**
* 得到指定日期所在月的第一天的0点0分0秒

* @param date
* @return Date
*/
public static Date getCurrentMonthBegin(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明给定时间是月末,返回值应该是下个月末


can.set(Calendar.DAY_OF_MONTH, can.getActualMinimum(Calendar.DAY_OF_MONTH));
can.set(Calendar.HOUR_OF_DAY, 00);
can.set(Calendar.MINUTE, 00);
can.set(Calendar.SECOND, 00);


return can.getTime();
}


/**
* 得到指定日期所在月的第最后天的23点59分59秒

* @param date
* @return Date
*/
public static Date getCurrentMonthEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明给定时间是月末,返回值应该是下个月末


can.set(Calendar.DAY_OF_MONTH, can.getActualMaximum(Calendar.DAY_OF_MONTH));
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);


return can.getTime();
}


/**
* 得到今天所在月的最后一天, 如果给定时间是月末,返回值应该是下个月末

* @return Date
*/
public static Date getMonthEnd() {
Date date = new Date();
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明给定时间是月末,返回值应该是下个月末
if (can.get(Calendar.DAY_OF_MONTH) == can.getActualMaximum(Calendar.DAY_OF_MONTH)) {
can.add(Calendar.MONTH, 1);
}
can.set(Calendar.DAY_OF_MONTH, can.getActualMaximum(Calendar.DAY_OF_MONTH));
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);


return can.getTime();
}


/**
* 得到指定日期所在周的的最后一天,如果传入的时间已经是周末,返回值应该是下个周末

* @param date
* @return Date
*/
public static Date getWeekEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明传入的时间已经是周末,返回值应该是下个周末
if (1 == can.get(Calendar.DAY_OF_WEEK)) {
can.add(Calendar.WEEK_OF_MONTH, 1);
}
can.set(Calendar.DAY_OF_WEEK, can.getActualMaximum(Calendar.DAY_OF_WEEK));
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);
can.add(Calendar.DAY_OF_MONTH, 1);
return can.getTime();
}


/**
* 得到指定日期第二天的结束时间

* @param date
* @return Date
*/
public static Date getTomorrowEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);
can.add(Calendar.DAY_OF_MONTH, 1);
return can.getTime();
}


/**
* 获得指定天的昨天的最后时间

* @param date
* @return
*/
public static Date getYesterdayEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);
can.add(Calendar.DAY_OF_MONTH, -1);
return can.getTime();
}


public static Date getYesterdayStart(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
can.set(Calendar.HOUR_OF_DAY, 00);
can.set(Calendar.MINUTE, 00);
can.set(Calendar.SECOND, 00);
can.add(Calendar.DAY_OF_MONTH, -1);
return can.getTime();
}


/**
* 设置特定时间的小时偏移量和天数偏移量。

* @param date
*            指定的天
* @param hourOffset
*            小时偏移量 正数为增加小时,负数为减去小时
* @param dateOffset
*            天数偏移量 正数为增加天 ,负数为减去天
* @param startOrEnd
*            0为开始时间忽略小时偏移量,例:2008-01-10 00:00:00 1为结束时间忽略小时偏移量,例:2008-01-10
*            23:59:59 2为指定时间的偏移量时间 例:偏移量为-1 指定时间为2008-01-10 00:00:00
*            返回时间为:2008-01-09 23:00:00
* @return
*/
public static Date getAppointDateByOffset(Date date, int hourOffset, int dateOffset, int startOrEnd) {
Calendar can = Calendar.getInstance();
can.setTime(date);
int hourOfDay = hourOffset;
int minute = 0;
int second = 0;
if (startOrEnd == 1) {
hourOfDay = 23;
minute = 59;
second = 59;
} else if (startOrEnd == 2) {
hourOfDay = hourOffset;
minute = 0;
second = 0;
}


can.set(Calendar.HOUR_OF_DAY, hourOfDay);
can.set(Calendar.MINUTE, minute);
can.set(Calendar.SECOND, second);
can.add(Calendar.DAY_OF_MONTH, dateOffset);
return can.getTime();
}


/**
* 得到现在时间所在周的的最后一天,如果传入的时间已经是周末,返回值应该是下个周末

* @return Date
*/
public static Date getWeekEnd() {
Date date = new Date();
Calendar can = Calendar.getInstance();
can.setTime(date);
// 说明传入的时间已经是周末,返回值应该是下个周末
if (1 == can.get(Calendar.DAY_OF_WEEK)) {
can.add(Calendar.WEEK_OF_MONTH, 1);
}
can.set(Calendar.DAY_OF_WEEK, can.getActualMaximum(Calendar.DAY_OF_WEEK));
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);
can.add(Calendar.DAY_OF_MONTH, 1);
return can.getTime();
}


/**
* 取得偏移时间

* @param nowDate
*            date偏移时间;
* @param day
*            偏移天数
* @param status
*            为分钟量 0是返回时间为00:00:00 ;1是返回为23:59:59; 2返回原始
* @return
*/
public static Date getOffsetTime(Date nowDate, int day, int status) {
Calendar curCalendar = Calendar.getInstance();
curCalendar.setTime(nowDate);
long t = curCalendar.getTimeInMillis() + day * 24 * 60 * 60 * 1000L;
curCalendar.setTimeInMillis(t);
if (status == 0) {
curCalendar.set(Calendar.HOUR_OF_DAY, 0);
curCalendar.set(Calendar.MINUTE, 0);
curCalendar.set(Calendar.SECOND, 0);
} else if (status == 1) {
curCalendar.set(Calendar.HOUR_OF_DAY, 23);
curCalendar.set(Calendar.MINUTE, 59);
curCalendar.set(Calendar.SECOND, 59);
}
return curCalendar.getTime();
}


/**
* 返回指定天的开始

* @param date
* @return
*/
public static Date getCurrentDayBegin(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
can.set(Calendar.HOUR_OF_DAY, 00);
can.set(Calendar.MINUTE, 00);
can.set(Calendar.SECOND, 00);
return can.getTime();
}


/**
* 返回指定天的结束

* @param date
* @return
*/
public static Date getCurrentDayEnd(Date date) {
Calendar can = Calendar.getInstance();
can.setTime(date);
can.set(Calendar.HOUR_OF_DAY, 23);
can.set(Calendar.MINUTE, 59);
can.set(Calendar.SECOND, 59);
return can.getTime();
}


/**
* 获取指定日期,指定偏移月份的日期

* @param date
* @param month
* @return
*/
public static Date getOffsetTimeByMonth(Date date, int month) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int sMonth = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, sMonth - month);
return calendar.getTime();
}


/**
* 获取时间差,返回固定格式yyyy_M_d

* @param startTm
* @param endTm
* @return
*/
public static List<String> getDateFix(long startTm, long endTm) {
List<String> ret = new ArrayList<String>();


if (startTm > endTm)
return ret;


Calendar startCal = new GregorianCalendar(TimeZone.getTimeZone("GMT+8"));
startCal.setTimeInMillis(startTm);
// startCal.set(Calendar.DAY_OF_YEAR, 1);


Calendar endCal = new GregorianCalendar(TimeZone.getTimeZone("GMT+8"));
endCal.setTimeInMillis(endTm);
// endCal.set(Calendar.DAY_OF_YEAR, 2);


for (; startCal.before(endCal); startCal.add(Calendar.DAY_OF_YEAR, 1)) {
String s = startCal.get(Calendar.YEAR) + "_" + (startCal.get(Calendar.MONTH) + 1) + "_"
+ (startCal.get(Calendar.DATE));
ret.add(s);
}


return ret;
}


/**
* 将一个java.util.Date类型变量依指定格式转换为字符串

* @param d
* @param format
* @return
*/
public static String dateToString(Date d, String format) {
if (d == null)
return null;
else
return new SimpleDateFormat(format).format(d);
}

//将时间戳转换为int类型的日期格式 20160601
public static int timeTo_yyyyMMdd(long time){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
return Integer.parseInt(dateFormat.format(time));
}


//将时间转换成String类型
public static String dateToStringAccurateToDay(Date date){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(date);
}
//将时间戳转换成String类型
public static String timeToStringAccurateToSecond(long time){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(time);
return dateFormat.format(date);
}
}
0 0
原创粉丝点击