常用的时间工具整理DateUtils

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/woshimuyi1025/article/details/82190591
package com.pdabc.sdk.util;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils extends com.panda.sdk.util.DateUtils{
	
    public static final  String FORMAT_DATE_I = "yyyy-MM-dd HH:mm";
    
    public static final  String FORMAT_DATE_II = "yyyy/MM/dd HH:mm";
    
    public static final  String FORMAT_DATE_AND_TIME_I = "yyyy-MM-dd HH:mm:ss";
    
    public static final  String FORMAT_DATE_AND_TIME_II = "yyyy/MM/dd HH:mm:ss";
    
    public static final  String FORMAT_ONLY_DATE_I = "yyyy-MM-dd";
    
    public static final  String FORMAT_ONLY_DATE_II = "yyyy/MM/dd";
    /**
     * 获得今天所在周的周一日期
     *
     * @return
     */
    public static Date getThisMondayDate() {
        return getThisMondayDate(new Date());
    }

    /**
     * 获得date所在周的周一日期
     *
     * @return
     */
    public static Date getThisMondayDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        // 国外的习惯是周日是一周的第一天 如果今天是星期天 那么 国内 的定义 这周的星期一是六天前 而国外是第二天
        int days = 0;
        if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
            days = -6;
        } else {
            days = Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK);
        }
        calendar.add(Calendar.DATE, days);
        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();
    }
    
     /**
     * 获取下一天
     *
     * @param date
     * @return
     */
    public static Date getNextDate(Date date) {
        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);
        cal.add(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    /**
     * 返回指定天数的日期
     * @param date
     * @param day
     * @return
     */
    public static Date getExpireDate(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, day);
        return cal.getTime();
    }
    
    /**
     * 获取明年1月1日
     * @return
     */
    public static Date getCurrentYearLastDay() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, 1);
        cal.set(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.add(Calendar.MILLISECOND, -1);
        return cal.getTime();
    }
    
    /**
	 * 获取当前日期是星期几<br>
	 * 
	 * @param date
	 * @return 当前日期是星期几
	 */
	public static String getWeekOfDate(Date date) {
		String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0)
			w = 0;
		return weekDays[w];
	}
	
	/**
	 * 获得一个时间前多少分钟的值,例如getPreTime(“18:00:00”,10)表示获取18:00:00的前10分钟值为17:50
	 */
	public static String getPreTime(String time,int reduceTime) {	 
	      String[] result = time.split(":");
	      int h = Integer.parseInt(result[0]);
	      int m = Integer.parseInt(result[1]);
	      if (m - reduceTime < 0) {
	          h -= 1+(reduceTime/60);
	          m = m + ((reduceTime/60)+1)*60 - reduceTime;
	      } else {
	          m -= reduceTime;
	      }
	      String newStr = String.format("%s:%s:%s", h, m, result[2]);
	      return newStr;
	 }
	
    /**
     * 格式化日期和时间
     * @param date
     * @return
     */
    public static Date format(String date) {
       // SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_DATE_I);
        //return sdf.parse(date);
    	SimpleDateFormat formatter = new SimpleDateFormat(FORMAT_DATE_I);
    	ParsePosition pos = new ParsePosition(0);
    	Date strtodate = formatter.parse(date, pos);
    	return strtodate;
    }

     /**
     * 通过生日日期计算年龄(周岁算法):用当年年份-生日年份,若若生日的月份和日数 > 当年的月份和日数,则减1
     *
     * @param birDate 生日日期
     * @return int年龄
     */
    public static int getAgeByBirDate(Date birDate) {
        int age = 0;
        try {
            if (birDate.after(new Date())) {
                return 0;
            }

            Calendar now = Calendar.getInstance();
            now.setTime(new Date());// 当前时间

            Calendar birth = Calendar.getInstance();
            birth.setTime(birDate);// 生日日期

            // 年龄为虚岁,用当年年份-生日年份
            age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);

            birth.set(Calendar.YEAR, now.get(Calendar.YEAR));
            now.set(Calendar.HOUR_OF_DAY, birth.get(Calendar.HOUR_OF_DAY));
            now.set(Calendar.MINUTE, birth.get(Calendar.MINUTE));
            now.set(Calendar.SECOND, birth.get(Calendar.SECOND));
            now.set(Calendar.MILLISECOND, birth.get(Calendar.MILLISECOND));
            if (birth.after(now)) {// 若生日的月份和日数 > 当年的月份和日数,则减1
                age--;
            }
            return age;
        } catch (Exception e) {// 兼容性更强,异常后返回数据
            return 0;
        }
    }

    /**
     * 通过年龄计算生日日期(周岁算法):年份减去年龄,默认当前的月份和日数,为生日日期的月份和日数
     *
     * @param age 年龄
     * @return Date 生日日期
     */
    public static Date getBirDateByAge(Integer age) {
        Date birDate = new Date();
        try {
            Calendar now = Calendar.getInstance();
            now.setTime(new Date());// 当前时间

            // 通过年龄计算生日日期,年份减去年龄,默认当前的月份和日数 为生日日期的月份和日数
            now.add(Calendar.YEAR, 0 - age);
            birDate = now.getTime();
            return birDate;
        } catch (Exception e) {// 兼容性更强,异常后返回数据
            return null;
        }
    }

    
}

猜你喜欢

转载自blog.csdn.net/woshimuyi1025/article/details/82190591