栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

日期,手机号码正则表达式校验等常用工具

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日期,手机号码正则表达式校验等常用工具

日期类工具 DataUtil

public class DateUtils {
    
    public static final ZoneOffset BJ_ZONE = ZoneOffset.of("+8");

    
    public static final long MILLI_SECOND_EXCHANGE_TIME_base = 1000L;

    
    public static Long getSecondsNextEarlyMorning() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

    
    public static String dateToString(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        return sdf.format(date);
    }

    
    public static Date getDayBegin() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);// 0点
        cal.set(Calendar.MINUTE, 0);// 0分
        cal.set(Calendar.SECOND, 0);// 0秒
        cal.set(Calendar.MILLISECOND, 0);// 0毫秒
        return cal.getTime();
    }


    
    public static List findDates(Date startTime, Date endTime) {
        Calendar cStart = Calendar.getInstance();
        cStart.setTime(startTime);
        cStart.set(Calendar.HOUR_OF_DAY, 0);
        cStart.set(Calendar.SECOND, 0);
        cStart.set(Calendar.MINUTE, 0);
        cStart.set(Calendar.MILLISECOND, 0);

        List dateList = new ArrayList<>();
        //起始日期加上
        dateList.add(cStart.getTime().getTime() / 1000L);
        // 此日期是否在指定日期之后
        while (endTime.after(cStart.getTime())) {
            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
            cStart.add(Calendar.DAY_OF_MONTH, 1);
            dateList.add(cStart.getTime().getTime() / 1000L);
        }
        if (!CollectionUtils.isEmpty(dateList)){
            dateList.remove(dateList.size()-1);
        }
        return dateList;
    }

    
    public static Date getBeginDayOfYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getDayBegin());// 当天开始时间
        cal.add(Calendar.DAY_OF_MONTH, -1);// 当天月份天数减1
        return cal.getTime();
    }

    
    public static Date getEndDayOfYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getDayEnd());// 当天结束时间
        cal.add(Calendar.DAY_OF_MONTH, -1);// 当天月份天数减1
        return cal.getTime();
    }

    
    public static Date getBeginDayOfTomorrow() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getDayBegin());// 当天开始时间
        cal.add(Calendar.DAY_OF_MONTH, 1);// 当天月份天数加1
        return cal.getTime();
    }

    
    public static Date getEndDayOfTomorrow() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getDayEnd());// 当天结束时间
        cal.add(Calendar.DAY_OF_MONTH, 1);// 当天月份天数加1
        return cal.getTime();
    }

    
    public static Date getDayEnd() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 23);// 23点
        cal.set(Calendar.MINUTE, 59);// 59分
        cal.set(Calendar.SECOND, 59);// 59秒
        return cal.getTime();
    }

    private final static DateTimeFormatter YYYY_MM = DateTimeFormatter.ofPattern("yyyyMM");

    public static Date localDateToDate(@NonNull LocalDate localDate) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
        return Date.from(instant);
    }

    public static LocalDate dateToLocalDate(@NonNull Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        return localDateTime.toLocalDate();
    }

    
    public static LocalDate firstDayOfCurrentMonth() {
        LocalDate localDate = LocalDate.now();
        return LocalDate.of(localDate.getYear(), localDate.getMonthValue(), 1);
    }

    
    public static LocalDate nextMonthToday(LocalDate target) {
        return target.plusMonths(1L);
    }

    
    public static LocalDate lastMonthToday(LocalDate target) {
        return target.plusMonths(-1L);
    }

    
    public static LocalDate nextDay(LocalDate target) {
        return target.plusDays(1L);
    }

    
    public static LocalDate lastDayOfCurrentMonth() {
        return lastDayOfTargetMonth(LocalDate.now());
    }

    
    public static LocalDate firstDayOfTargetMonth(LocalDate targetDate) {
        return LocalDate.of(targetDate.getYear(), targetDate.getMonthValue(), 1);
    }

    
    public static LocalDate lastDayOfTargetMonth(LocalDate targetDate) {
        return targetDate.with(TemporalAdjusters.lastDayOfMonth());
    }

    
    public static LocalDate firstDayOfNextMonth(LocalDate targetDate) {
        targetDate = targetDate.plusMonths(1L);
        return LocalDate.of(targetDate.getYear(), targetDate.getMonthValue(), 1);
    }

    
    public static LocalDate lastDayOfNextMonth(LocalDate targetDate) {
        return targetDate.plusMonths(1L).with(TemporalAdjusters.lastDayOfMonth());
    }

    
    public static int totalDaysOfMonth(LocalDate localDate) {
        return lastDayOfTargetMonth(localDate).getDayOfMonth();
    }

    
    public static int intervalDays(LocalDate start, LocalDate end) {
        return Period.between(start, end).plusDays(1L).getDays();
    }

    
    public static boolean isSameMonth(LocalDate source, LocalDate target) {
        return YearMonth.from(source).equals(YearMonth.from(target));
    }

    
    public static String formatYYYYMM(LocalDate localDate) {
        return localDate.format(YYYY_MM);
    }

    
    public static YearMonth toYearMonth(String str) {
        return YearMonth.parse(str, YYYY_MM);
    }

    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2021, 8, 10);
        LocalDate end = LocalDate.of(2021, 9, 1);
        System.out.println(lastDayOfCurrentMonth());
        System.out.println(firstDayOfTargetMonth(start));
        System.out.println(totalDaysOfMonth(LocalDate.now()));
        System.out.println(totalDaysOfMonth(start));
        System.out.println(totalDaysOfMonth(end));
        System.out.println(LocalDate.now().getMonth() == start.getMonth());
        System.out.println(LocalDate.now().plusMonths(1L));
        System.out.println(intervalDays(start, end));
        System.out.println(Period.between(start, end).getMonths());
        System.out.println(YearMonth.from(start).equals(YearMonth.from(end)));
        System.out.println(formatYYYYMM(LocalDate.now()));
        System.out.println(toYearMonth(formatYYYYMM(LocalDate.now())));
        System.out.println(toYearMonth(formatYYYYMM(LocalDate.now())).atDay(1));
    }


}

手机号码正则校验
正则表达式

package com.ruqimobility.user.constant;

import java.util.regex.Pattern;


public abstract class RegularConst {
    
    private static final String TELEPHONE = "^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\d|9\d)\d{8}$";
    
    public static final Pattern PHONE_PATTERN = Pattern.compile(TELEPHONE);

}

实体类字段贴上@phone注解, 会进行自动校验

package com.ruqimobility.user.request;

import com.ruqimobility.user.annotation.Phone;
import com.ruqimobility.user.dtos.TripShareSetting;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class CreateEmergencyContactRequest {

    
    @NotNull(message = "用户ID必填")
    @ApiModelProperty(value = "用户ID", required = true)
    private Long userId;

    
    @Phone(ignoreEmpty = false)
    @ApiModelProperty(value = "联系人手机号码", required = true)
    private String phone;

    
    @NotBlank(message = "联系人姓名必填")
    @ApiModelProperty(value = "联系人姓名", required = true)
    private String name;

    
    @ApiModelProperty(value = "操作者名称")
    private String operator;

    
    @NotNull(message = "必须设置自动分享行程参数")
    @ApiModelProperty(value = "是否自动分享行程,1分享,0不分享", required = true)
    private Boolean enableTripShare = false;

    
    @ApiModelProperty(value = "行程分享设置内容")
    private TripShareSetting tripShareSetting;
}

使用phone注解的方式

package com.ruqimobility.user.annotation;

import com.ruqimobility.user.constant.RegularConst;
import org.springframework.util.StringUtils;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.regex.Matcher;


@documented
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {Phone.Phonevalidator.class})
public @interface Phone {

    
    String message() default "手机号码不正确";

    
    Class[] groups() default {};

    
    Class[] payload() default {};

    
    boolean ignoreEmpty() default true;

    
    class Phonevalidator implements ConstraintValidator {

        private Phone annotation;

        @Override
        public void initialize(Phone annotation) {
            this.annotation = annotation;
        }

        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            //如果配置忽略空值且传的是空值,则默认通过校验
            if (annotation.ignoreEmpty() && StringUtils.isEmpty(value)) {
                return true;
            }
            if (!annotation.ignoreEmpty() && StringUtils.isEmpty(value)) {
                return false;
            }
            Matcher matcher = RegularConst.PHONE_PATTERN.matcher(value);
            return matcher.matches();
        }
    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号