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

    科技2025-04-07  16

    文章目录

    日期类格式化类随机数类编码解码类

    日期类

    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进制 } }
    Processed: 0.010, SQL: 8