JAVA----util常用类,1字符串转日期,2格式化类Format,3Random,4MD5,5Base64
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];
}
}
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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?