获取时间的工具类

1.生成12位的授权码

/**
 * 生成12位的授权码
 * @param maxLeng
 * @return
 */
public static String generateKey(int maxLeng) {
    final int maxNum = 41;
    int i; // 生成的随机数
    int count = 0; // 生成的密码的长度
    char[] str = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
            't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$',
            '*' };
    StringBuffer key = new StringBuffer("");
    Random r = new Random();
    while (count < maxLeng) {
        // 生成随机数,取绝对值,防止生成负数,
        i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为36-1
        if (i >= 0 && i < str.length) {
            key.append(str[i]);
            count++;
        }
    }
    return key.toString();
}

2.获取下个月的今天是几月几号

/**
 * 获取下个月的今天是几月几号
 * 格式:MM-dd
 * @return
 */
public static String getNextMonth() {
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(new Date());
    calendar.add(Calendar.MONTH,1);
    return sdf.format(calendar.getTime());
}

3.获取明天是几月几号

/**
 * 获取明天是几月几号
 * 格式:MM-dd
 * @return
 */
public static String getTomorrow() {
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(new Date());
    calendar.add(Calendar.DATE,1);
    return sdf.format(calendar.getTime());
}

4.获取昨天是几月几号

/**
 * 获取昨天是几月几号
 * 格式:MMdd
 * @return
 */
public static String getYesterday() {
    SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
    Date date = new Date();
    Long as = Long.valueOf(sdf.format(date)) - 1;
    String Yester = String.valueOf(as);
    return Yester;
}

5.计算某个日期几秒之后的时间

/**
 * 计算某个日期几秒之后的时间
 * @param minute
 * @return
 */
public static String getSomeTimeBySecond(String time,int second) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Calendar calendar = Calendar.getInstance();
    try {
        calendar.setTime(sdf.parse(time));
        calendar.add(Calendar.SECOND, second);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
}

6.某个日期的几天后的时间的时间

/**
 * 某个日期的几天后
 * @param time
 * @param days
 * @return
 */
public static String getSomeDayBefore(String time,Integer days){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar now = Calendar.getInstance();
    try {
        now.setTime(sdf.parse(time));
        System.out.println(now.getTime());
        now.set(Calendar.DATE, now.get(Calendar.DATE) + days);
        System.out.println(sdf.format(now.getTime()));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sdf.format(now.getTime());
}

7.某个日期几个月后的时间

/**
 * 某个日期几个月后
 * @param time
 * @param days
 * @return
 */
public static String getSomeMonthBefore(String time,Integer days){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar now = Calendar.getInstance();
    try {
        now.setTime(sdf.parse(time));
        System.out.println(now.getTime());
        now.set(Calendar.MONTH, now.get(Calendar.MONTH) + days);
        System.out.println(sdf.format(now.getTime()));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sdf.format(now.getTime());
}

8.日期和字符串互转

/**
 * YYYY_MM_dd转日期
 * 格式:MMdd
 * @return
 */
public static String datetoYYYY_MM_dd(String date) {
    SimpleDateFormat formerSDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateString=null;
    try {
        dateString = sdf.format(formerSDF.parse(date));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dateString;
}

/**
 * 日期转时间戳
 * @param date
 * @return
 */
public static String date2TimeStamp(String date){
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return String.valueOf(sdf.parse(date).getTime()/1000);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

/**
 * 时间戳转日期
 * @param date
 * @return
 */
public static String timeStamp2Date(String date){
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new Date(Long.valueOf(date+"000")));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

9.与当前时间相差几分钟

/**
 * 与当前时间相差几分钟
 * @param nowDate
 * @return
 */
public static Long getTwoDateMin(String nowDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
        Date nowDate1 = dateFormat.parse(nowDate);
        Date date = new Date();
        long diff = date.getTime() - nowDate1.getTime();
        long min = diff/60/1000;
        return min;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

10. 获得上个月月份年份

/**
 * 获得上个月月份年份
 * @return
 */
public static String getYearMonth() {
    Calendar now = Calendar.getInstance();
    int month = now.get(Calendar.MONTH);
    String m;
    if (month < 10) {
        m = "0" + month;
    } else {
        m = month + "";
    }
    return now.get(Calendar.YEAR) + "-" + m;
}

11.获取当前时间

/**
 * 获取年月日
 * 格式:yyyyMMdd  HHmmss  yyyy-MM-dd  MM-dd  MMdd  yyyy-MM  yyyy-MM-dd HH:mm:ss
 * @param days
 * @return
 */
public static String getYYYYMMdd() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    Date date = new Date();
    return sdf.format(date);
}

12.返回两个日期之差 相差天数

/**
 * 时间比较大小 
 * 时间格式:yyyy-MM-dd
 * @param startDate
 * @param endDate
 * @return 返回秒数
 * @throws ParseException
 */
public static int daysBetween(Date startDate,Date endDate) throws ParseException {    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    startDate = sdf.parse(sdf.format(startDate));  
    endDate = sdf.parse(sdf.format(endDate));  
    Calendar cal = Calendar.getInstance();
    cal.setTime(startDate);    
    long time1 = cal.getTimeInMillis();                 
    cal.setTime(endDate);    
    long time2 = cal.getTimeInMillis();         
    long between_days=(time2-time1)/(1000*3600*24);  
    return Integer.parseInt(String.valueOf(between_days));           
} 

/**
 * 返回两个日期之差 
 * @param backMonthNum
 * @return
 */
public static Integer getDateNum(Date startTime,Date endTime) {
    try {
        Integer dateNum = (int) ((endTime.getTime() - startTime.getTime()) / (1000*3600*24));
        return dateNum;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
/** * 返回传入日期与当前时间的日期相差天数 * @param backMonthNum * @return */ public static Integer getDateNum(String time) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date now = dateFormat.parse(dateFormat.format(new Date())); Date compareTime = dateFormat.parse(time); int dateNum = (int) ((compareTime.getTime() - now.getTime()) / (1000*3600*24)); return dateNum; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 返回两个日期相差天数 * @param backMonthNum * @return */ public static Integer getTwoDateNum(String startTime,String endTime) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date startDate = dateFormat.parse(startTime); Date endDate = dateFormat.parse(endTime); int dateNum = (int) ((endDate.getTime() - startDate.getTime()) / (1000*3600*24)); return dateNum; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 时间string格式 比大小当createDate小于toDate时返回true,反之为false * @param createDate * @param toDate * @return * @throws ParseException */ public static boolean daysContrast(String createDate,String toDate) throws ParseException { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date create=df.parse(createDate); Date todates=df.parse(toDate); return create.before(todates); } /** * 时间Date格式 比大小当createDate小于toDate时返回true,反之为false * @param createDate * @param toDate * @return * @throws ParseException */ public static boolean daysDateContrast(Date createDate,Date toDate) throws ParseException { return createDate.before(toDate); }

13.计算2个日期之间相差的  相差多少年月日

/**
 * 计算2个日期之间相差的  相差多少年月日
 * 比如:2011-02-02 到  2017-03-02 相差 6年,1个月,0天
 * @param fromDate
 * @param toDate
 * @return
 */
public static int dayComparePrecise(String startTime,String toTime){
    int days = 0;
    try {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        long from = simpleFormat.parse(startTime).getTime();
        long to = simpleFormat.parse(toTime).getTime();
        days = (int) ((to - from)/(1000 * 60 * 60 * 24));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return days;
}

14.将格式yyyy-MM-dd转成yyyyMMdd

/**
 * 将格式yyyy-MM-dd转成yyyyMMdd
 * @param time
 * @return 
 */
public static String getYYYYMMdd(String time) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat othersdf = new SimpleDateFormat("yyyyMMdd");
    Date date=null;
    try {
        date = sdf.parse(time);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return othersdf.format(date);
}
/**
 * YYYY_MM_dd转日期
 * 格式:MMdd
 * @return
 */
public static Date YYYY_MM_ddToDate(String dateString) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date=null;
    try {
        date = sdf.parse(dateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

/**
 * YYYY_MM_dd转日期
 * 格式:MMdd
 * @return
 */
public static String datetoYYYY_MM_dd(Date date) {
    if (date==null){
        return null;
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateString=null;
    dateString = sdf.format(date);
    return dateString;
}

15.返回当天时间的前几个月的时间

/**当前时间20180712,下个月时间为20180812
 * @param time 传入的开始时间
 * @param backMonthNum 相差的月数
 * @return 返回的时间格式:yyyy-MM-dd
 */
public static String getMonthDay(String time,Integer monthNum) {
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date=dateFormat.parse(time);
        //Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // 设置为传入时间
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + monthNum); //设置正数为下几个月,负数为前几个月
        date = calendar.getTime();
        return dateFormat.format(date);
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
}

 

/**
 * 几天后时间
 * 格式:yyyy-MM-dd
 * @param days
 * @return
 */
public static String getDaysLater(Integer days){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar now = Calendar.getInstance();
    now.setTime(new Date());
    now.set(Calendar.DATE, now.get(Calendar.DATE) + days);
    return sdf.format(now.getTime());
}

/**
 * 几天前时间
 * 格式:yyyy-MM-dd
 * @param days
 * @return
 */
public static String getDaysBefore(Integer days){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar now = Calendar.getInstance();
    now.setTime(new Date());
    now.set(Calendar.DATE, now.get(Calendar.DATE) - days);
    return sdf.format(now.getTime());
}

16.

/*
 * 获取指定日期下个月的第一天
 * @param dateStr
 * @param format
 * @return
 */
public static String getFirstDayOfNextMonth(String dateStr, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    try {
        Date date = sdf.parse(dateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); // 设置为下几个月
        return sdf.format(calendar.getTime());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 当前时间加几个小时
 * @param hour
 * @return
 */
public static Date currDateAddHour(Double hour){
    long currentTime = new Date().getTime();
    currentTime += hour *60*60*1000;
    Date date=new Date(currentTime);
    return date;
}

/**
 * 计算几分钟之后的时间
 * @param minute
 * @return
 */
public static String getTimeByMinute(int minute) {
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MINUTE, minute);
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
}

17.

/**
 * 得到几天后的时间
 * @param format:yyyy-MM-dd
 * @param day
 * @return
 */
public static String getDateAfter(int day,String format) {
    SimpleDateFormat sf = new SimpleDateFormat(format);
    Calendar c = Calendar.getInstance();
    c.add(Calendar.DAY_OF_MONTH, day);
    return sf.format(c.getTime());
}

18.

/**
 * 得到几天后的时间
 * @param d
 * @param day
 * @return
 * @throws ParseException 
 */
public static String getAfterDay(String time,int day){
    // 时间表示格式可以改变,yyyyMMdd需要写例如20160523这种形式的时间
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String str = time;
    // 将字符串的日期转为Date类型,ParsePosition(0)表示从第一个字符开始解析
    Date date = sdf.parse(str, new ParsePosition(0));
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    // add方法中的第二个参数n中,正数表示该日期后n天,负数表示该日期的前n天
    calendar.add(Calendar.DATE, day);
    Date date1 = calendar.getTime();
    String out = sdf.format(date1);
    return out;
}

18.

/**
 * 当前时间 - createTime 小于 3分钟
 * 比如:2011-02-02 到  2017-03-02 相差 6年,1个月,0天
 * @return
 */
public static long diffMin(String createTime){
    long minutes = 0l;
    try {
          DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
          Date d1 = df.parse(createTime);  
          Date d2 = new Date();
          long diff = d2.getTime() - d1.getTime();//这样得到的差值是毫秒级别  
          long days = diff / (1000 * 60 * 60 * 24);  
          long hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);  
          minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);  
          System.out.println(""+days+"天"+hours+"小时"+minutes+"分");  
    } catch (Exception e) {
        e.printStackTrace();
    }
    return minutes;
}

19.与当前时间比较大小

/**
 * 与当前时间比较大小
 * @param time 格式:yyyy-MM-dd
 * @param type gt大于 lt小于 
 * @return false or true
 */
public static boolean compareNow(String time,String type){
    Date now = new Date();
    try {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        now=sdf.parse(sdf.format(now));
        Date timeDate=sdf.parse(time);
        if("gt".equals(type)){
            if(timeDate.after(now)){//大于等于当前时间
                return true;
            }
        }else if("gte".equals(type)){
            if(timeDate.after(now)||sdf.format(now).equals(time)){//大于等于当前时间
                return true;
            }
        }else if("lte".equals(type)){
            if(now.after(timeDate)||sdf.format(now).equals(time)){//小于
                return true;
            }
        }else{
            if(now.after(timeDate)){//小于
                return true;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return false;
}

/**
 * 与当前时间比较大小
 * @param time 格式:yyyy-MM-dd
 * @param type gt大于 lt小于 
 * @return false or true
 */
public static boolean compareNowYMDHMS(String time,String type){
    Date now = new Date();
    try {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        now=sdf.parse(sdf.format(now));
        Date timeDate=sdf.parse(time);
        if("gt".equals(type)){
            if(timeDate.after(now)){//大于当前时间
                return true;
            }
        }else{
            if(now.after(timeDate)){//小于
                return true;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return false;
}
public static String diffMonthAndDay(Date startDate, Date endDate){
    Calendar calS = Calendar.getInstance();
    calS.setTime(startDate);
    int startY = calS.get(Calendar.YEAR);
    int startM = calS.get(Calendar.MONTH);
    int startD = calS.get(Calendar.DATE);
    int startDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);
    
    calS.setTime(endDate);
    int endY = calS.get(Calendar.YEAR);
    int endM = calS.get(Calendar.MONTH);
    //处理2011-01-10到2011-01-10,认为服务为一天
    int endD = calS.get(Calendar.DATE)+1;
    int endDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);
    
    StringBuilder sBuilder = new StringBuilder();
    if (endDate.compareTo(startDate)<0) {
        return sBuilder.append("过期").toString();
    }
    int lday = endD-startD;
    if (lday<0) {
        endM = endM -1;
        lday = startDayOfMonth+ lday;
    }
    //处理天数问题,如:2011-01-01 到    2013-12-31     2年11个月31天     实际上就是3年
    if (lday == endDayOfMonth) {
        endM = endM+1;
        lday =0;
    }
    int mos = (endY - startY)*12 + (endM- startM);
    int lyear = mos/12;
    int lmonth = mos%12;
    if (lyear >0) {
        lmonth+=lyear*12;
    }
    if (lmonth > 0) {
        sBuilder.append(lmonth+"个月");
    }
    if (lday >0 ) {
        sBuilder.append(lday+"天");
    }
    return sBuilder.toString();
}

public static Map<String, String> diffDate(Date startDate, Date endDate){
    Map<String, String> result=new HashMap<String, String>(); 
    try {
        Calendar calS = Calendar.getInstance();
        calS.setTime(startDate);
        int startY = calS.get(Calendar.YEAR);
        int startM = calS.get(Calendar.MONTH);
        int startD = calS.get(Calendar.DATE);
        int startDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        calS.setTime(endDate);
        int endY = calS.get(Calendar.YEAR);
        int endM = calS.get(Calendar.MONTH);
        //处理2011-01-10到2011-01-10,认为服务为一天
        int endD = calS.get(Calendar.DATE)+1;
        int endDayOfMonth = calS.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        if (endDate.compareTo(startDate)<0) {
            return result;
        }
        int lday = endD-startD;
        if (lday<0) {
            endM = endM -1;
            lday = startDayOfMonth+ lday;
        }
        //处理天数问题,如:2011-01-01 到    2013-12-31     2年11个月31天     实际上就是3年
        if (lday == endDayOfMonth) {
            endM = endM+1;
            lday =0;
        }
        int mos = (endY - startY)*12 + (endM- startM);
        int lyear = mos/12;
        int lmonth = mos%12;
        if (lyear >0) {
            lmonth+=lyear*12;
        }
        if (lmonth > 0) {
            result.put("month", lmonth+"");
        }
        if (lday >0 ) {
            result.put("day", lday+"");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}


public static Map<String, String> diffDate2(String reverifyTime,Integer timeValue,Integer nowPeriod){
    Map<String, String> result=new HashMap<String, String>();
    if(timeValue-nowPeriod>0){
        result.put("month", timeValue-nowPeriod+"");
    }

    String endDate=getMonthDay(reverifyTime,nowPeriod);
    String formerDate=getMonthDay(reverifyTime,nowPeriod-1);
    System.out.println("endDate--->"+endDate);
    System.out.println("formerDate"+formerDate);
    System.out.println("getTwoDateNum-->"+getTwoDateNum(formerDate,getYYYY_MM_dd()));
    if(getTwoDateNum(formerDate,getYYYY_MM_dd())<0){
        //如果上次应回款时间比现在时间大的话,则为提前还款,那么天数
        Integer dateNum=getTwoDateNum(formerDate,endDate);
        result.put("day", dateNum+"");
    }else{
        Integer dateNum=getTwoDateNum(getYYYY_MM_dd(),endDate);
        if(dateNum>0){
            result.put("day", dateNum+"");
        }
    }
    return result;
}

 

posted @ 2019-07-18 11:19  An-Optimistic-Person  阅读(670)  评论(0编辑  收藏  举报