常用时间工具类

/**
 * 判断一个日期为第几周,以周一为第一天
 * @param dateA
 * @param format
 * @return
 * @throws Exception
 */
public static int dateInWeek(String dateA, String format) throws Exception {
    SimpleDateFormat dateFormatter = new SimpleDateFormat(format);
    Date dateB = dateFormatter.parse(dateA);
    Calendar c = new GregorianCalendar();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.setMinimalDaysInFirstWeek(4);
    c.setTime(dateB);
    return c.get(Calendar.WEEK_OF_YEAR);
}

/**
 * @author 101010114
 * @date: 2020/01/19
 * @description date2比date1多的天数
 * @param dateStr1 时间日期
 * @param dateStr2 时间日期
 * @return differentDays 相差天数
 */
public static long differentDays(String dateStr1, String dateStr2) {
    long differentDays = 0;
    SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.PURE_DATE_PATTERN);
    try {
        Date date1 = sdf.parse(dateStr1);
        Date date2 = sdf.parse(dateStr2);
        differentDays = (date1.getTime() - date2.getTime()) / (60 * 60 * 24 * 1000);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return Math.abs(differentDays);
}

/**
 * 得出一个日期的周中日期
 * @param dateA
 * @param format
 * @return
 * @throws Exception
 */
public static String dateWeek(String dateA,String format){
    SimpleDateFormat dateFormatter = new SimpleDateFormat(format);
    //得到年

    Date dateB= null;
    try {
        dateB = dateFormatter.parse(dateA);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar c = new GregorianCalendar();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.setMinimalDaysInFirstWeek(4);
    c.setTime(dateB);
    int year=c.get(Calendar.YEAR);
    int month=c.get(Calendar.WEEK_OF_YEAR);
    return String.valueOf(year)+ ObjUtil.leftAddZero(String.valueOf(month),2);
}

//判断字符串是否为日期格式
public static boolean isDateFormat(String str){
    Pattern pattern = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))");
    Matcher isNum = pattern.matcher(str);
    if( !isNum.matches() ){
        return false;
    }
    return true;
}

/**
 * 获取日期对应的年周
 * @param dateA 日期
 * @param format 日期对应的格式
 * @return yyyyww 年周
 */
public static String sonyDateWeek(String dateA,String format){

    SimpleDateFormat dateFormatter = new SimpleDateFormat(format);
    //得到年

    Date dateB= null;
    try {
        dateB = dateFormatter.parse(dateA);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar c = new GregorianCalendar();
    c.setMinimalDaysInFirstWeek(4);
    c.setFirstDayOfWeek(Calendar.MONDAY);
    c.setTime(dateB);
    int year=c.get(Calendar.YEAR);
    int week=c.get(Calendar.WEEK_OF_YEAR);

    // 获取当前年份的第一天 格式为yyyyMMdd
    String firstDayOfYear = year +"0101";
    int weekIndex = dateToWeek(firstDayOfYear,"yyyyMMdd");

    // 获取当年的第一个周一的日期
    int plusDays = 7 - weekIndex + 1;
    String firstMonday = getNNextDate(firstDayOfYear,"yyyyMMdd",plusDays,format);

    if(dateA.compareTo(firstMonday)<0){
        year--;
    }

    return String.valueOf(year)+ ObjUtil.leftAddZero(String.valueOf(week),2);
}

/**
 * 日期获取星期几
 * @param datetime 日期
 * @param format 日期格式
 * @return 星期日:0,星期一:1,星期二:2,以此类推,星期六:6
 */
public static int dateToWeek(String datetime,String format) {
    SimpleDateFormat f = new SimpleDateFormat(format);
    Calendar cal = Calendar.getInstance();
    try {
        Date datet = f.parse(datetime);
        cal.setTime(datet);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return (cal.get(Calendar.DAY_OF_WEEK)-1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值