java中常用的时间处理工具类

package com.hand.util;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;


import org.apache.commons.lang.StringUtils;


import com.hand.util.constant.Constant;


/**
 * @ClassName: DateUtil
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author Administer
 * @date 2014�?6�?17�? 下午4:25:37
 * 
 */
public class DateUtil {
/**
* 日期格式:yyyyMM
*/
public static final String DATEFORMAT_SIX = "yyyyMM";
/**
* 日期格式:yyyyMMdd
*/
public static final String DATEFORMAT_EIGHT = "yyyyMMdd";
/**
* 日期格式:yyyy-MM-dd
*/
public static final String DATEFORMAT_TEN = "yyyy-MM-dd";
/**
* 日期格式:yyyy-MM-dd HH:mm:ss
*/
public static final String DATEFORMAT_NINTEEN = "yyyy-MM-dd HH:mm:ss";


public static Integer dayFormat(Date startDate, Date endDate) {
return (int) (endDate.getTime() - startDate.getTime() / (24 * 60 * 60 * 1000));
}


/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)

* @return
*/
public static Date format(String dateTime) {
SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT_TEN);
Date date = new Date();
try {
date = sdf.parse(dateTime);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}


/**
* 时间转字符串(yyyy-MM-dd)

* @return
*/
public static String format(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}


/**
* @param dateTime
*            字符串格式的时间
* @param pattern
*            时间样式
* @return
* @throws ParseException
*/
public static Date format(String dateTime, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
if (StringUtils.isNotEmpty(dateTime)) {
return sdf.parse(dateTime);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


public static String dsFormat(String dateTime, String format) throws ParseException {
if (dateTime == null || "".equals(dateTime))
return null;
if (format == null) {
format = DATEFORMAT_NINTEEN;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return String.valueOf(sdf.format(new Date(Long.valueOf(dateTime))));
}
 /* 
     * 将时间戳转换为时间
     */
    public static String stampToDate(String s){
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        return res;
    }
/**
* 取得当前系统时间(yyyy-MM-dd HH:mm:ss)

* @return
*/
public static String getCurrentDate() {
SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT_NINTEEN);
return sdf.format(new Date());
}


public static String dateToXmlString(Date date) {
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT_EIGHT);
String dateString = sdf.format(date);
return dateString;
}


/**
* 获取本月的第�?�?

* @return
*/
public static Date getFirstDay(Long dateTime) {
Calendar cal = new GregorianCalendar();
cal.setTime(new Date(dateTime));
int day = cal.getMinimum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}


/**

* @param timestamp
*            毫秒�?
* @param format
*            yyyy-mm-DD hh:MM:ss
* @return
*/
public static String getStartTime(String timestamp) {
if (StringUtils.isBlank(timestamp)) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(Long.valueOf(timestamp));
StringBuffer sb = new StringBuffer();
sb.append(cal.get(Calendar.YEAR) + "-");
int month = cal.get(Calendar.MONTH) + 1;
if (month < 10) {
sb.append("0");
}
sb.append(month + "-");
int dayOfM = cal.get(Calendar.DAY_OF_MONTH);
if (dayOfM < 10) {
sb.append("0");
}
sb.append(dayOfM + " ");
int hourOfD = cal.get(Calendar.HOUR_OF_DAY);
if (hourOfD < 10) {
sb.append("0");
}
sb.append(hourOfD + ":");
int min = cal.get(Calendar.MINUTE);
if (min < 10) {
sb.append("0");
}
sb.append(min + ":");
int sec = cal.get(Calendar.SECOND);
if (sec < 10) {
sb.append("0");
}
sb.append(sec);
String timeStr = sb.toString();
return timeStr;
}


/**
* 获得日期时间对应�?,long�?

* @param dateTime
* @param pattern
* @return long�?
* @throws ParseException
*/
public static long getTime(String dateTime, String pattern) throws ParseException {
Date dateValue = format(dateTime, pattern);
return dateValue.getTime();
}


/*
* 获取�?天开始时�?
*/
public static Long getStartTime(Long timestamp) {
Date date = new Date(timestamp);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime().getTime();
}


public static Date getTime(String time, Long timeStamp) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(time);
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(d.getTime() + timeStamp));
return calendar.getTime();
} catch (ParseException e) {

e.printStackTrace();
}
return null;
}


/*
* 获取�?个月前的�?天开始时�?
*/
public static Long getMonthAgoTime(Long timestamp) {
return getMonthLaterTime(timestamp, -1);
}


/*
* 获取上个�?1日的�?始时�?
*/
public static Long getPriorMonthStart(Long timestamp) {
Date date = new Date(timestamp);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
int year = calendar.get(Calendar.YEAR);
if (month == 0) {
month = 11;
year--;
} else {
month = month - 1;
}
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime().getTime();
}


/*
* 获取本月1日的�?始时�?
*/
public static Long getMonthStart(Long timestamp) {
return DateUtil.getFirstDay(timestamp).getTime();
}


/**
* @Title: getMonthLaterTime
* @Description: 获取n个月后的�?天开始时�?,n为负数时表示前面的时�?
* @param timestamp
* @param n
* @return
*/
public static Long getMonthLaterTime(Long timestamp, int n) {
Date date = new Date(timestamp);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
month += n;
if (month > 11) {
year += month / 11;
month = month % 11;
} else {
while (month < 0) {
month += 12;
year -= 1;
}
}
if (day > 28) {
if (month == 1) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
day = 29;
} else {
day = 28;
}
} else if ((month == 3 || month == 5 || month == 8 || month == 10) && day == 31) {
day = 30;
}
}
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime().getTime();
}


/**
* @Title: getYearStart
* @Description: 获取n年后�?1�?1 日开始时�?,或n<0,表示n年前
* @param time
* @return
*/
public static Long getYearStart(Long time, int n) {


Date date = new Date(time);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);


calendar.set(Calendar.YEAR, year + n);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return time;


}


/**
* 获取今天星期�? zhanfeilong
*/
public static int getWeekOfDate() {
Date dt = new Date();
int[] weekDays = { 7, 1, 2, 3, 4, 5, 6 };
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}


/**
* 日期转换成字符串

* @param date
* @return str
*/
public static String DateToStr(Date date, String formatString) {
SimpleDateFormat sdf = new SimpleDateFormat(formatString);
return sdf.format(date);
}


/**
* 聚date前day天的信息

* @param date
* @param day
* @return
*/
public static String getDayFormatBeforeTime(Date date, Integer day) {
Calendar ca = Calendar.getInstance();// 得到�?个Calendar的实�?
ca.setTime(date); // 设置时间为当前时�?
ca.add(Calendar.DATE, day);// 日期�?1
Date resultDate = ca.getTime(); // 结果
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(resultDate);
}


public static String getDayFormatBeforeTime(String time, Integer day) {
Calendar ca = Calendar.getInstance();
ca.setTime(format(time, "yyyy-MM-dd"));
ca.add(Calendar.DATE, day);// 日期�?1
Date resultDate = ca.getTime(); // 结果
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(resultDate);
}


/**
* 聚date前day天的信息

* @param date
* @param day
* @return
*/
public static Date getDayBeforeTime(Date date, Integer day) {
Calendar ca = Calendar.getInstance();// 得到�?个Calendar的实�?
ca.setTime(date); // 设置时间为当前时�?
ca.add(Calendar.DATE, day);// 日期�?1
return ca.getTime();
}


public static String formatDateToString(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String startTime = sdf.format(date);
return startTime;
}


/**
* 计算两个日期之间相差的天数

* @param smdate
*            较小的时间
* @param bdate
*            较大的时间
* @return 相差天数
* @throws ParseException
*/
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
smdate = sdf.parse(sdf.format(smdate));
bdate = sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);


return Integer.parseInt(String.valueOf(between_days));
}


/**
* 计算年龄

* @param 出生日期
* @return 年龄
*/
public static Integer calcAge(Date birthDay) {
SimpleDateFormat format = new SimpleDateFormat("yyyy");
if (birthDay != null) {
Integer birthYear = Integer.parseInt(format.format(birthDay));
Calendar calendar = Calendar.getInstance();
Integer nowYear = calendar.get(Calendar.YEAR);
Integer age = nowYear - birthYear;
if (age <= 0) {
age = 1;
}
return age;
} else {
return null;
}
}




//获取上个月的第一天
public static String getBeforeFirstMonthdate(){
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return sf.format(calendar.getTime());
 
}
//获取上个月的最后一天
public  static String getBeforeLastMonthdate(){
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar=Calendar.getInstance();
int month=calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return sf.format(calendar.getTime());
}


//获取上几个月的第一天
public static String getBeforeFristNumMonthdate(Integer num ){
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MONTH, -num);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return sf.format(calendar.getTime());
 
}
//获取上几月的最后一天
public  static String getBeforeLastNunMonthdate(Integer num){
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MONTH, -(num-1));
int month=calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return sf.format(calendar.getTime());
}




//获得上周的 周一
    public static String getBeforeWeekdateMonday(){
    Calendar date=Calendar.getInstance(Locale.CHINA);
    date.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
    date.add(Calendar.WEEK_OF_MONTH,-1);//周数减一,即上周  
   
    date.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//日子设为星期一
    return new SimpleDateFormat("yyyy-MM-dd").format(date.getTime());
}
    //获得上周的 周日
    public static String getBeforeWeekdateSunday(){
    Calendar date=Calendar.getInstance(Locale.CHINA);
    date.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
    date.add(Calendar.WEEK_OF_MONTH,-1);//周数减一,即上周  
    date.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//日子设为星期日
    return new SimpleDateFormat("yyyy-MM-dd").format(date.getTime());
}

    //获得前几个周的周日
    public static String getBeforeNumWeekSunday(Integer num){
    Calendar date=Calendar.getInstance(Locale.CHINA);
    date.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
    date.add(Calendar.WEEK_OF_MONTH,-num);//周数减一,即上周  
    date.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//日子设为星期日
    return new SimpleDateFormat("yyyy-MM-dd").format(date.getTime());
    }
    //获得前几个周的周一
    public static String getBeforeNumWeekMonday(Integer num){
    Calendar date=Calendar.getInstance(Locale.CHINA);
    date.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
    date.add(Calendar.WEEK_OF_MONTH,-num);//周数减一,即上周  
    date.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//日子设为星期一
    return new SimpleDateFormat("yyyy-MM-dd").format(date.getTime());
    }


    //根据具体日期获得该日期所在周的周一
    public static String getMondayByDate(Date date){
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式  
         Calendar cal = Calendar.getInstance();  
         cal.setTime(date);  
         //判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了  
         int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
         if(1 == dayWeek) {  
           cal.add(Calendar.DAY_OF_MONTH, -1);  
         }  
         cal.setFirstDayOfWeek(Calendar.MONDAY);//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  
         int day = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天  
         cal.add(Calendar.DATE, cal.getFirstDayOfWeek()-day);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值   
         String imptimeBegin = sdf.format(cal.getTime());  
return imptimeBegin;
    }
    
    //获得一段时间内的 周一 和周日的 日期 
    public static List<String[]> getWeekends(Date d1, Date d2){
    List<String[]> list = new ArrayList<String[]>();
    if(d1 == null || d2 == null){
       return list;
    }
    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c1.setTime(d1);
    c2.setTime(d2);
    // 保证第二个时间一定大于第一个时间
    if (c1.after(c2)) {
    c2.setTime(d1);
    c1.setTime(d2);
    }
    c1.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
    // 当日期c2在日期c1之后退出循环
    while(c2.compareTo(c1)>=0){
    if(c1.get(Calendar.DAY_OF_WEEK) == 1){
    String date[] = new String[2];
    String sundayDate = DateUtil.format(c1.getTime(), "yyyy-MM-dd");//获得该段时间内的周日 的日期
    String mondayDate =  getMondayByDate(c1.getTime());
    date[0] =mondayDate;
    date[1]=sundayDate;
    list.add(date);
    }
    // 天数加1
    c1.set(Calendar.DAY_OF_YEAR, (c1.get(Calendar.DAY_OF_YEAR) + 1));
    }
    return list;
    }
    
    
    /** 
     * 根据日期计算当月的第一天与最后一天 
     *  
     * @param time 
     * @return 
     */  
    public static Map<String, Object> convertMonthByDate(Date date) {  
        Map<String, Object> map = new HashMap<String, Object>();  
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(date);  
        calendar.add(Calendar.MONTH, -1);  
        Date theDate = calendar.getTime();  
        // 上个月第一天  
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();  
        gcLast.setTime(theDate);  
        gcLast.set(Calendar.DAY_OF_MONTH, 1);  
        String day_first = df.format(gcLast.getTime());  
        // 上个月最后一天  
        calendar.add(Calendar.MONTH, 1); // 加一个月  
        calendar.set(Calendar.DATE, 1); // 设置为该月第一天  
       calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天  
        String day_last = df.format(calendar.getTime());  
        map.put("first", day_first);  
        map.put("last", day_last);  
        return map;  
  
    }  
    
    
    //获得一段时间内每个月的首末时间
    public   static  List<String[]> getMonths(Date d1, Date d2){
    List<String[]> list = new ArrayList<String[]>();
    if(d1 == null || d2 == null){
       return list;
    }
    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c1.setTime(d1);
    c2.setTime(d2);
    // 保证第二个时间一定大于第一个时间
    if (c1.after(c2)) {
    c2.setTime(d1);
    c1.setTime(d2);
    }
    String months ="";
    while(c2.compareTo(c1)>=0){
    SimpleDateFormat  sm = new SimpleDateFormat("yyyy-MM-dd");
    String month =sm.format(c1.getTime());
    if(StrUtils.isEmpty(month)){
    months =month;
    }else{
    months =months+Constant.SPLIT_STR+month;
    }
    c1.add(Calendar.MONTH, 1);
    }
    if(!StrUtils.isEmpty(months)){
    String monthArray[] = months.split(Constant.SPLIT_STR);
    if(monthArray.length>0){
    for(int i=0;i<monthArray.length;i++){
    Date dt;
try {
if(!StrUtils.isEmpty(monthArray[i])){
dt = new SimpleDateFormat("yyyy-MM-dd").parse(monthArray[i]);
Calendar c3 = Calendar.getInstance();
c3.setTime(dt);
c3.add(Calendar.MONTH, 1);
Map<String ,Object> map = convertMonthByDate(c3.getTime());
String date[] = new String[2];
date[0]=(String) map.get("first");
date[1] = (String) map.get("last");
list.add(date);
}
} catch (ParseException e) {
e.printStackTrace();
}
        }
    }
    }
return list;
    }
    //获得一段时间的每一天
    public static List<String>  getDays(String day1, String day2){
    List<String> list = new ArrayList<String>();
    Date d1 =DateUtil.format(day1, "yyyy-MM-dd");
    Date d2 = DateUtil.format(day2, "yyyy-MM-dd");
    if(d1 == null || d2 == null){
       return list;
    }
    Calendar c1 = Calendar.getInstance();
    Calendar c2 = Calendar.getInstance();
    c1.setTime(d1);
    c2.setTime(d2);
    // 保证第二个时间一定大于第一个时间
    if (c1.after(c2)) {
    c2.setTime(d1);
    c1.setTime(d2);
    }
    // 当日期c2在日期c1之后退出循环
    while(c2.compareTo(c1)>=0){
    String dayDate = DateUtil.format(c1.getTime(), "yyyy-MM-dd");//获得该段时间内的周日 的日期
    list.add(dayDate);
    // 天数加1
        c1.set(Calendar.DAY_OF_YEAR, (c1.get(Calendar.DAY_OF_YEAR) + 1));
    }
return list;
    }
    
    
    
public static void main(String[] args) {
Date date = DateUtil.format("2018-02-08 15:09:32", DATEFORMAT_NINTEEN);
   System.out.println(date.getTime());
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值