1.日期常用
1.1 获取当前日期LocalDateTime
//获取当前时间 2021-11-26 09:23:21
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//获取当前年YYYY-MM-DD
System.out.println(LocalDate.now());
//获取当前时间HH:mm:ss
System.out.println(LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
//获取年月日 时分秒 当前时间星期几
System.out.println("年:" + LocalDate.now().getYear());
System.out.println("月:" + LocalDate.now().getMonthValue());
System.out.println("日:" + LocalDate.now().getDayOfMonth());
System.out.println("小时:" + LocalDateTime.now().get(ChronoField.HOUR_OF_DAY));
System.out.println("分:" + LocalDateTime.now().get(ChronoField.MINUTE_OF_HOUR));
System.out.println("秒:" + LocalDateTime.now().get(ChronoField.SECOND_OF_MINUTE));
System.out.println("星期几:" + LocalDateTime.now().get(ChronoField.DAY_OF_WEEK));
System.out.println("判断是否是润年(返回Boolean类型):" + LocalDate.now().isLeapYear());
//得到一个localData格式时间日期
LocalDate date4 = LocalDate.of(2021, 11, 26);
LocalTime date2 = LocalTime.of(12, 30, 00);
//比较两个日期
System.out.println(date4.equals(date2));
1.2对日期进行操作LocalDateTime
//加天 + 加日 +加年
System.out.println(LocalDateTime.now().plusHours(2).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(LocalDateTime.now().plusDays(2).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(LocalDateTime.now().plusYears(2).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//加1星期也就是加7天
System.out.println(LocalDateTime.now().plusWeeks(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
LocalDateTime date1 = LocalDateTime.of(2021, 11, 26, 12, 30, 00);
LocalDateTime date3 = LocalDateTime.of(2021, 9, 26, 12, 30, 00);
//date1 是在date3之后 返回true
System.out.println(date1.isAfter(date3));
//date1 不在date3之前 返回false
System.out.println(date1.isBefore(date3));
//相差 年 月 日 小时 分钟 秒
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.YEARS.between(date3, date1));
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.MONTHS.between(date3, date1));
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.DAYS.between(date3, date1));
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.HOURS.between(date3, date1));
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.MINUTES.between(date3, date1));
System.out.println("ChronoUnit.DAYS.between计算出的天数时间差:" + ChronoUnit.SECONDS.between(date3, date1));
//日期date转string string转date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String strTime = sdf.format(new Date());
Date dateTime= sdf.parse("2021-01-01");
1.3日期的一些常用转换
//String-->LocalDateTime
LocalDateTime parse = LocalDateTime.parse("2021-11-12 12:30:10", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//long--->LocalDateTime
System.out.println(LocalDateTime.ofInstant(Instant.ofEpochMilli(1637896436195L), ZoneId.systemDefault()));
//LocalDateTime-->long
System.out.println(Timestamp.valueOf(LocalDateTime.now()).getTime());
//LocalDateTime-->Date
System.out.println(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()));
2.密码加密操作
2.1MD5+随机盐密码加密
用的依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
public class PasswordUtil {
/**
* 随机盐密码生成长度
*/
private static final int PASSWORD_AND_SALT_LENGTH = 32;
/**
* 生成随机盐
*
* @return
*/
public static String createRandomKet() {
return IdUtil.simpleUUID();
}
/**
* 生成含有随机盐的密码.
*
* @param salt 随机盐
* @param password 密码
* @return 含有随机盐的密码 MD5 值
*/
public static String generate(String password, String salt) {
password = DigestUtil.md5Hex(password + salt);
char[] md5 = new char[PASSWORD_AND_SALT_LENGTH];
for (int i = 0; i < PASSWORD_AND_SALT_LENGTH; i++) {
md5[i] = password.charAt(i / 2);
md5[++i] = salt.charAt(i / 2);
}
return new String(md5);
}
/**
* 校验密码
*
* @param md5Password 根据正确密码加密后的md5密码
* @param password 登录时输入的密码
* @param salt 密码随机盐
* @return true/false
*/
public static boolean checkPassword(String md5Password, String password, String salt) {
if (md5Password.equals(generate(password, salt))) {
return true;
}
return false;
}
}
3.流操作
3.1输入流合并
import java.io.SequenceInputStream;
public InputStream inputStreamMerge(String account, InputStream inputStream2) {
String sql = "ALTER SESSION SET CURRENT_SCHEMA = " + account + "; ";
//让sql这个字符串 插入到inputStream2 流前面
InputStream inputStreams = new ByteArrayInputStream(sql.getBytes());
SequenceInputStream sequenceInputStream = new SequenceInputStream(inputStreams, inputStream2);
return sequenceInputStream;
}
4.文件操作
MultipartFile 文件模拟方法
1、MockMultipartFile的构造函数
MockMultipartFile的构造函数有4种形式。
String name = 'test.txt';
String originalFilename = 'test.txt';
String contentType = 'text/plain';
byte[] content = 'test content'.getBytes();
MultipartFile file = new MockMultipartFile(String name, String originalFilename,String contentType, byte[] content)
其中name为上传文件的参数名,originalFilename为上传文件的原始文件名,contentType为上传文件的类型,content为上传文件的二进制数据。
MultipartFile file = new MockMultipartFile(String name, InputStream contentStream,String originalFilename, String contentType)
其中name为上传文件的参数名,contentStream为上传文件的输入流,originalFilename为上传文件的原始文件名,contentType为上传文件的类型。
MultipartFile file = new MockMultipartFile(String name, Resource resource)
其中name为上传文件的参数名,resource为上传文件的Spring中的Resource对象,它是Spring中对资源文件的抽象表示。
MultipartFile file = new MockMultipartFile(String name, MockMultipartFile multipartFile)
其中name为上传文件的参数名,multipartFile为上传文件的另一个MockMultipartFile对象。