首页 > 编程语言 >java----util常用类,1字符串转日期,2格式化类Format,3Random,4MD5,5Base64

java----util常用类,1字符串转日期,2格式化类Format,3Random,4MD5,5Base64

时间:2022-10-21 13:12:09浏览次数:61  
标签:java 3Random System util String static println Calendar out

util常用类

1. 字符串转日期

1.1 Date/Calendar

String dateStr = "2020-01-01 10:00:00";
jdk1.8之前与时间 日期相关的类型有2个   java.util.Date    java.util.Calendar
Date() 
Date(long date)   将毫秒数转换成Date对象
     
long getTime()  
   
private static void demo() {
       Date date = new Date();
       System.out.println(date);//Thu May 20 14:52:13 CST 2021

       //获得当前时间毫秒数
       //System.out.println(System.currentTimeMillis());

       Date date1 = new Date(System.currentTimeMillis());
       System.out.println(date1.getTime());
  }    

 

 

Calendar:
 private static void demo1() {
       //创建日历对象
       Calendar calendar = Calendar.getInstance();
       System.out.println(calendar);

       //get(int field)
       System.out.println(calendar.get(Calendar.YEAR));
       System.out.println(calendar.get(Calendar.MONTH) + 1);
       System.out.println(calendar.get(Calendar.DATE));
       System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

       //获得今天是周几: 7
       String[] week = {"7", "1", "2", "3", "4", "5", "6"};
       System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//5 第五天 星期四
       System.out.println(week[calendar.get(Calendar.DAY_OF_WEEK) - 1]);

       System.out.println("-----------------------");
       //修改时间 2021-4 set
       //calendar.set(Calendar.MONTH,Calendar.APRIL);
       //calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+10);
       calendar.add(Calendar.DAY_OF_MONTH, 10);
       System.out.println(calendar.get(Calendar.YEAR));
       System.out.println(calendar.get(Calendar.MONTH) + 1);
       System.out.println(calendar.get(Calendar.DATE));

       //calendar.set(2019,Calendar.JANUARY,10,12,30,30);
       //day+10
       
       //获得一个月份的最大的天数: 31 30 28/29
       System.out.println(calendar.getActualMaximum(Calendar.DATE));
  }      

 

1.2 LocalDate/LocalDateTime

线程安全  值不可变的
java.time.*
LocalDate: 年-月-日
LocalDateTime     年-月-日 时分秒
DateTimeFormatter: 格式化1.8+    

 

 private static void userRegister1() {
       Scanner input = new Scanner(System.in);
       System.out.println("录入name:");
       String name = input.nextLine();
       System.out.println("录入birthday:");
       String birthday = input.nextLine();

       UserInfo1 userInfo1 = new UserInfo1();
       userInfo1.setName(name);
       //需要将String转LocalDate
       //userInfo1.setBirthday(LocalDate.parse(birthday));
       userInfo1.setBirthday(LocalDate.parse(birthday,DateTimeFormatter.ofPattern("yyyy年MM月dd")));
       userInfo1.setCreateTime(LocalDateTime.now());//获得当前系统的时间 new Date()

       System.out.println(userInfo1);

  }

 

private static void testLocalDateTime() {
       LocalDateTime now = LocalDateTime.now();
       System.out.println(now.toString());//2021-05-20T16:02:34.623

       LocalDateTime localDateTime = LocalDateTime.of(2019, Month.APRIL, 20, 12, 30, 30);
       System.out.println(localDateTime);//2019-10-20T12:30:30

       //求间隔天数
       long until = Math.abs(now.until(localDateTime, ChronoUnit.HOURS));
       System.out.println(until);

       //get   ChronoField
//       System.out.println(now.get(ChronoField.YEAR));
//       System.out.println(now.getYear());

       //修改 plus/minus +10
       // ChronoUnit
//       now = now.plus(Duration.of(10,ChronoUnit.DAYS));
//       System.out.println(now);

//       now = now.minus(10, ChronoUnit.DAYS);
//       System.out.println(now);

       LocalDate now1 = LocalDate.now();
       System.out.println(now1);
       LocalDate localDate = LocalDate.of(2021,Month.APRIL,1);
       Period period = localDate.until(now1);
       System.out.println(period.toString());
       //get
       System.out.println(period.getYears());
       System.out.println(period.getMonths());
       System.out.println(period.getDays());


  }

 

 

2. 格式化类Format

1. DateFormat

使用子类: SimpleDateFormat 线程不安全的类

常用构造:
 SimpleDateFormat(String pattern)
     
常用方法:
 Date   parse(String dateStr)  将字符串转Date
 String format(Date date);   Date转String    

模拟用户注册:

private static void userRegister() {

       Scanner input = new Scanner(System.in);
       System.out.println("录入name:");
       String name = input.nextLine();
       System.out.println("录入birthday:");
       String birthday = input.nextLine();//2020-01-01


       UserInfo userInfo = new UserInfo();
       userInfo.setName(name);
       userInfo.setBirthday(DateUtil.strConvertToDate(birthday, false));
       userInfo.setCreateTime(new Date());

       System.out.println("注册成功");
       System.out.println("用户详细信息:" + userInfo.toString());
  }

 

public class DateUtil {


private static final String PATTERN = "yyyy-MM-dd";//false
private static final String PATTERN1 = "yyyy-MM-dd HH:mm:ss";//true

private DateUtil() {
}


//String转Date
public static Date strConvertToDate(String dateStr, boolean flag) {

if (dateStr == null || dateStr.isEmpty()) {
throw new NumberFormatException(dateStr + "不符合数据格式");
}

String result;
if (flag) {
result = PATTERN1;
} else {
result = PATTERN;
}
DateFormat dateFormat = new SimpleDateFormat(result);
try {
return dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return null;

}

//Date转String
public static String dateConvertToStr(Date date, boolean flag) {

Objects.requireNonNull(date);
String result;
if (flag) {
result = PATTERN1;
} else {
result = PATTERN;
}
DateFormat dateFormat = new SimpleDateFormat(result);
return dateFormat.format(date);

}
}

 

 

2. NumberFormat

public class DecimalFormatDemo {
public static void main(String[] args) {
Double number = 2342353411.1236666;
Double number2 = 0.1276666;
//NumberFormat decimalFormat = new DecimalFormat(".####");保留几位小数,一个#一位
//NumberFormat decimalFormat = new DecimalFormat(",###.####");整数三个用,分割
//百分数
NumberFormat decimalFormat = new DecimalFormat(".##%");
System.out.println(decimalFormat.format(number2));
}
}

 

 

3. 随机数类Random

public class RandomDemo {
   public static void main(String[] args) {
       //多线程使用 ThreadLocalRandom
       ThreadLocalRandom localRandom = ThreadLocalRandom.current();

       for (int i = 0; i < 5; i++) {
           for (int i1 = 0; i1 < 5; i1++) {
               int i2 = localRandom.nextInt(1000, 10000);
               System.out.print(i2+"\t");
          }
           System.out.println();
      }
       System.out.println("-----------------------------");
       //可以不给seed 200
       Random random = new Random(200);
       for (int i = 0; i < 5; i++) {
           //Random random = new Random(200);放在里面5轮结果相同,放在外面都不相同
           for (int i1 = 0; i1 < 5; i1++) {
               int num = random.nextInt(9000) + 1000;
               System.out.print(num+"\t");
          }
           System.out.println();
      }
  }
}

 

4. MD5

md5不可逆,信息摘要算法的一种 MessageDegest

package javasm;

import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;

public class Md5Util {
  private static char[] ARRAY = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f',};

  private static final String ENCODING = "UTF-8";
  private static final String SALT = "JINITAIMEI_KUNKUN++";
  private Md5Util() {
  }

  public static void main(String[] args) {
      System.out.println(md5Encode("1234"));
  }

  public static String md5Encode(String sourceStr){
      Objects.requireNonNull(sourceStr);
      StringBuilder builder = new StringBuilder();
      try {
          //1.创建信息摘要对象
          MessageDigest messageDigest = MessageDigest.getInstance("MD5");
          //2.更新信息摘要对象,将需要加密的内容放入算法中
          sourceStr = SALT+sourceStr;//加固的的盐值salt(自定义)
          messageDigest.update(sourceStr.getBytes(Charset.forName(ENCODING)));
          //3.加密
          byte[] encodeArray = messageDigest.digest();
          //------------
          //jdk提供的

          BigInteger bigInteger = new BigInteger(1,encodeArray);
          System.out.println("bigPass:"+bigInteger.toString(16));
          //--------------
          for (byte by : encodeArray) {
              builder.append(byteHex(by));
          }
      } catch (NoSuchAlgorithmException e) {
          e.printStackTrace();
      }
      return builder.toString().toUpperCase();
  }

  private static String byteHex(byte by) {
      int num = by;
      if(num<0){
          num+=256;
      }
      int highIndex = num / 16;
      int lowIndex = num % 16;
      return ARRAY[highIndex]+""+ARRAY[lowIndex];
  }
}

 

 

5. Base64

Base64: 加密(编码)/解密(解码)。可逆 A-Za-z0-9 组成的字符串

public class PassDemo {
  private static final String ENCODING = "UTF-8";

  public static void main(String[] args) {
      System.out.println(reg("1234"));//MTIzNA==
      System.out.println(login("1234"));
  }

  //两种比较:1.获得注册时候加密后的数据在解密进行比较
  //2.在登陆时获得登陆数据加密在和注册后加密的数据比较
  private static boolean login(String sourcePass) {
      Objects.requireNonNull(sourcePass);
      //Base64   1.获得解码器
      Base64.Decoder decoder = Base64.getDecoder();
      //2.解码
      byte[] decode = decoder.decode("MTIzNA==");
      return sourcePass.equals(new String(decode, Charset.forName(ENCODING)));
  }

  private static String reg(String sourceStr) {
      //Base64   1.获得编码器
      Objects.requireNonNull(sourceStr);
      Base64.Encoder encoder = Base64.getEncoder();
      //2.编码
      byte[] bytes = sourceStr.getBytes(Charset.forName(ENCODING));

      return encoder.encodeToString(bytes);
  }

}

标签:java,3Random,System,util,String,static,println,Calendar,out
From: https://www.cnblogs.com/wang1999an/p/16813120.html

相关文章