常用的工具类(Date、format、MD5等)

日期类

  • Date
    • date转字符串,字符串转date
public class DateUtil {

    private DateUtil(){}

    private static  final String PATTERN = "yyyy-MM-dd HH:mm:ss";
//    private static  DateFormat dateFormat;//充当成员变量
    // SimpleDateFormat线程不安全  多个线程使用了同一个实例
    // 推荐使用: ThreadLocal管理SimpleDateFormat的对象,有且只能存储一个对象---> ThreadLocal会给每个线程都会创建一个对象
    //创建ThreadLocal的实例
    private static  final ThreadLocal<SimpleDateFormat> THREAD_LOCAL = new ThreadLocal(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(PATTERN);
        }
    };
    //需要通过THREAD_LOCAL获得SimpleDateFormat的实例  get()

    /**
     * Date 转换成String
     * @param date
     * @return
     */
    public  static  String dateConvertToStr(Date date){
        Objects.requireNonNull(date);
        return THREAD_LOCAL.get().format(date);
    }

    /**
     * String 转换成 Date
     * @param dateStr
     * @return
     */
    public  static Date strConvertToDate(String dateStr){
        //创建格式化日期对象
        Objects.requireNonNull(dateStr);
        try {
            return THREAD_LOCAL.get().parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
  • Calendar
public class CalendarDemo {

    public static void main(String[] args) {

        // Calendar实例化
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

        Calendar calendar1 = new GregorianCalendar();
        System.out.println(calendar1);
        //jdk1.8以前  推荐运用Calendar替换Date

        System.out.println(calendar.get(Calendar.YEAR));//2020
        System.out.println(calendar.get(Calendar.MONTH)+1);//1-12  0-11
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //修改指定字段的数据
        calendar.set(Calendar.YEAR,2019);
        System.out.println(calendar.get(Calendar.YEAR));

        calendar.add(Calendar.YEAR,1);//指定字段新增量的数据
        System.out.println(calendar.get(Calendar.YEAR));

        calendar.set(2020,1,10);

        Date time = calendar.getTime();//calendar 转换成  Date
        System.out.println(calendar.getActualMaximum(Calendar.DATE));//根据的指定的属性获得最大值  月份最后天数:  30  /31
        System.out.println(calendar.getMaximum(Calendar.DATE));//月份最后一天  31
    }
}
  • Instant(java.time包下:值不可变,线程安全)
public class InstantDemo {

    public static void main(String[] args) {

        Instant instant = Instant.now();//2020-05-26T06:56:14.121Z  UTC时区
        System.out.println(instant);
//        instant = instant.plusSeconds(8*3600);// 8h 转换成秒数
//        instant = instant.plusSeconds(Duration.ofHours(8).getSeconds());// 间隔8h  Duration/period
        instant = instant.plus(Duration.ofHours(8)); //加8个小时,转成中国时区
//          instant = instant.plus(8,ChronoUnit.HOURS);
//        instant = Instant.now(Clock.offset(Clock.systemUTC(),Duration.ofHours(8)));

//        System.out.println(instant.get(ChronoField.INSTANT_SECONDS));
//        System.out.println(instant.getLong(ChronoField.INSTANT_SECONDS));
//        instant = instant.with(ChronoField.HOUR_OF_DAY,15);

        Instant instant1 = Instant.now().plus(Duration.ofHours(8));
        System.out.println(instant1);

        //long until(Temporal endExclusive, TemporalUnit unit)
        System.out.println(Math.abs(instant.until(instant1, ChronoUnit.HOURS)));//计算两个时间差值。ChronoUnit.HOURS-计量单位
    }
}
  • LocalDateTime(java.time包下:值不可变,线程安全)
    • 和字符串的互相转换
	private static  final String PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(PATTERN);

    public static LocalDateTime strToLocalDateTime(String dateStr){
        //字符串解析成哪个日期类的对象 就调用这个日期类的方法  parse
        return  LocalDateTime.parse(dateStr,DATE_TIME_FORMATTER);
    }

    public static  String localDateTimeToStr(LocalDateTime localDateTime){
        return DATE_TIME_FORMATTER.format(localDateTime);
    }
public class LocalDateTimeDemo {


    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now(); //2020-05-26T15:17:50.420
        localDateTime = localDateTime.plus(Duration.ofHours(2));
        localDateTime =  localDateTime.plusYears(1);
        localDateTime = localDateTime.minus(1,ChronoUnit.YEARS);
        System.out.println(localDateTime.get(ChronoField.YEAR));
        System.out.println(localDateTime);

        System.out.println(localDateTime.getMonth());
        System.out.println(Month.MARCH);
        System.out.println(localDateTime.getDayOfWeek());


        System.out.println(DateUtil.strToLocalDateTime("2020-01-01 12:00:00"));

        System.out.println(DateUtil.localDateTimeToStr(LocalDateTime.now()));//2020-05-26 15:53:44


        System.out.println(Instant.parse("2020-01-01 12:00:00"));
        String PATTERN = "yyyy-MM-dd HH:mm:ss";
        System.out.println(ZoneId.systemDefault());
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN).withZone(ZoneId.systemDefault());

        TemporalAccessor parse = formatter.parse("2020-01-01 12:00:00");
        Instant instant =(Instant) parse;
        System.out.println(instant);//java.time.format.Parsed cannot be cast to java.time.Instant
        System.out.println(parse.toString());//{},ISO resolved to 2020-01-01T12:00

        Instant now = Instant.now();//UTC
        String format = formatter.format(now);
        System.out.println(format);
    }
}

格式化类

  • Dateformat
    • SimpleDateFormat 只针对于Date类型的数据进行格式化操作。
public abstract class DateFormat
extends Format
    
public class SimpleDateFormat
extends DateFormat  
常用构造:
   SimpleDateFormat(String pattern) 创建指定模式的格式化日期对象
       
常用方法:
   String format(Date date)   将Date转换成String
   Date parse(String source)   String解析成Date
  • DateTimeFormatter
    • 针对于LocalDateTime类型的数据进行格式化操作。
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(PATTERN);
  • NumberFormat
public class NumberFormatDemo {
    public static void main(String[] args) {
        demo3();
    }

    private static void demo3() {
        //银行项目
        NumberFormat numberFormat = new DecimalFormat("###,###.####");
        BigDecimal bigDecimal = new BigDecimal("782355344326.276354371");
        String format = numberFormat.format(bigDecimal.doubleValue());
        System.out.println(format);
    }

    private static void demo2() {
        NumberFormat numberFormat = new DecimalFormat("#####.##%");
        String format = numberFormat.format(1.561264);
        System.out.println(format);//
    }

    private static void demo1() {

        NumberFormat numberFormat = new DecimalFormat("###.##");//  0  或者  #
        //1.格式化小数  小数点后面保留2位
        String format = numberFormat.format(20.561234);
        System.out.println(format);
    }
}

随机数类

  • Random线程不安全
  • ThreadLocalRandom线程安全
private static void demo1() {

		ThreadLocalRandom random = ThreadLocalRandom.current();
		random.nextInt(begin,bound);
		
        //循环3次生成随机数  每次生成5个  0-100
        for (int i = 0; i < 3; i++) {
            Random random = new Random();
            for (int i1 = 0; i1 < 5; i1++) {
                int randomNum = random.nextInt(101);
                System.out.print(randomNum+",");
            }
            System.out.println();
        }

        System.out.println("------------------------");
        for (int i = 0; i < 3; i++) {
            Random random = new Random(1); 
            // 调用new Random(seed)相当于:Random rnd = new Random(); rnd.setSeed(seed); 
            // setSeed的一般合同是它改变这个随机数生成器对象的状态,使其处于完全相同的状态
            for (int i1 = 0; i1 < 5; i1++) {
                int randomNum = random.nextInt(101);
                System.out.print(randomNum+",");
            }
            System.out.println();
        }
    }

编码解码类

  • Base64(可逆)
    • 编码:(加密) Encoder;解码(解密): Decoder
public class Base64Demo {
    public static void main(String[] args) {
        System.out.println(encoderPass("abc42rffsav"));//YWJjNDJyZmZzYXY=
        System.out.println(login("abc42rffsav1"));
    }

    private static boolean login(String loginPass) {
        //1.再加密
        //2.获得加密之后的数据  进行解密
        String encoderPass = "YWJjNDJyZmZzYXY=";//肯定是以后通过技术查询出来的
        Base64.Decoder decoder = Base64.getDecoder();//获得解码器
        byte[] decode = decoder.decode(encoderPass);
        //2.将decode转换成新的字符串
        if(!loginPass.equals(new String(decode))){
            return false;
        }
        return true;
    }

    /**
     * 注册(保存用户信息 1234(明文)--->加密的之后的数据 密文)
     * @param sourcePass
     * @return
     */
    private static String encoderPass(String sourcePass) {
        Objects.requireNonNull(sourcePass);
        Base64.Encoder encoder = Base64.getEncoder();// 获得编码器
        return encoder.encodeToString(sourcePass.getBytes());
    }
}

  • MessageDigest(信息摘要算法,不可逆)
public class MD5Util {

    private MD5Util(){}

    public static String md5(String source){
        Objects.requireNonNull(source);
        String salt = "lisa#&%*_";//一串特殊的内容 盐值
        source=source+salt;
        try {
            //1.创建信息摘要对象
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            //2.将需要解密的文本更新到messageDigest
            messageDigest.update(source.getBytes());
            //3.加密
            byte[] digest = messageDigest.digest();
//            System.out.println(Arrays.toString(digest));
            //将字节数组转换成字符串  BigInteger
            BigInteger bigInteger = new BigInteger(1,digest);
            return bigInteger.toString(16).toUpperCase();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
        System.out.println(md5("1234"));//81DC9BDB52D04DC20036DBD8313ED055   16进制
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值