Java日期常用操作

/**

  • 时间工具类
  • @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); } }

转载于:https://my.oschina.net/u/3254415/blog/833289

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值