日期类
Calendar
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//获取当前年份
System.out.println(calendar.get(Calendar.YEAR));
//获取当年月份(注意要加1)
System.out.println(calendar.get(Calendar.MONDAY+1));
//获取周几(注意要减1)
System.out.println(calendar.get(Calendar.DAY_OF_WEEK) - 1);
//获取今天几号
System.out.println(calendar.get(Calendar.DATE));
//0---上午 1---下午
System.out.println(calendar.get(Calendar.AM_PM));
//获取当前时间 Date -> String
Date time = calendar.getTime();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(time));
//计算年份
calendar = new GregorianCalendar();
Calendar calendar2 = new GregorianCalendar();
calendar2.set(Calendar.YEAR, 2000);
//2023年在2000以后
System.out.println(calendar.after(calendar2));
//增加年分
calendar2.add(Calendar.YEAR,25);
System.out.println(calendar.before(calendar2));
}
2023
33
3
16
0
2023-08-16 10:13:34
true
true
LocalDateTime
public static void main(String[] args) {
//获取当前时间
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//创建对象
LocalDateTime localDateTime = LocalDateTime.of(2023, 9, 17, 2, 2, 2);
System.out.println(localDateTime);
//加上60秒
System.out.println(now.plusSeconds(60));
//减去一年
System.out.println(now.minusYears(2));
//修改月份为12月
System.out.println(now.withMonth(12));
//判断时间再之前还是之后
System.out.println(now.isAfter(localDateTime));
System.out.println(now.isBefore(localDateTime));
}
2023-08-17T14:14:44.747
2023-09-17T02:02:02
2023-08-17T14:15:44.747
2021-08-17T14:14:44.747
2023-12-17T14:14:44.747
false
true
Hutool
Hutool中 常用的工具类和方法_hutool常用方法_Maverick Programmer的博客-CSDN博客
DateUtil 日期时间工具类
Date、long、Calendar之间的相互转换
public static void main(String[] args) {
//当前时间:date = 2019-09-17 16:59:23
Date date = DateUtil.date();
//当前时间:date2 = 2019-09-17 16:59:23
Date date2 = DateUtil.date(Calendar.getInstance());
//当前时间:date3 = 2019-09-17 16:59:23
Date date3 = DateUtil.date(System.currentTimeMillis());
//当前时间字符串:now = 2019-09-17 16:59:23
String now = DateUtil.now();
//当前日期字符串:today = 2019-09-17
String today= DateUtil.today();
}
字符串转日期
/*DateUtil.parse方法会自动识别一些常用格式,包括:
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
yyyy-MM-dd HH:mm
yyyy-MM-dd HH:mm:ss.SSS*/
//这四种情况均可以转换,并且输出结果均为: 2019-09-17 00:00:00
Date date1 = DateUtil.parse("2019-09-17");
Date date2 = DateUtil.parse("2019-09-17", "yyyy-MM-dd");
Date date3 = DateUtil.parse("2019/09/17", "yyyy/MM/dd");
Date date4 = DateUtil.parse("2019:09:17", "yyyy:MM:dd");
格式化日期输出
Date date1 = DateUtil.parse("2019-09-17");
//结果: 2019/09/17
String format = DateUtil.format(date1, "yyyy/MM/dd");
//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date1);
//结果:2019-09-17 00:00:00
String formatDateTime = DateUtil.formatDateTime(date1);
//结果:00:00:00
String formatTime = DateUtil.formatTime(date1);
获取Date对象的某个部分
Date date = DateUtil.date();
//获得年的部分:year = 2019
int year = DateUtil.year(date);
//获得月份,从0开始计数:month = 8
int month = DateUtil.month(date);
//获得月份枚举 :monthEnum = SEPTEMBER
Month monthEnum = DateUtil.monthEnum(date);
开始和结束时间
String now = DateUtil.now();
Date date = DateUtil.parse(now);
//一天的开始,结果:2019-09-17 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);
//一天的结束,结果:2019-09-17 23:59:59
Date endOfDay = DateUtil.endOfDay(date);
日期时间偏移
String now = DateUtil.now();
//date = 2019-09-17 17:35:35
Date date = DateUtil.parse(now);
//结果:newDate = 2019-09-19 17:35:35
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
//常用偏移,结果:newDate2 = 2019-09-20 17:35:35
DateTime newDate2 = DateUtil.offsetDay(date, 3);
//常用偏移,结果:newDate3 = 2019-09-17 14:35:35
DateTime newDate3 = DateUtil.offsetHour(date, -3);
//针对当前时间,提供了简化的偏移方法(例如昨天、上周、上个月等):
//昨天
DateUtil.yesterday()
//明天
DateUtil.tomorrow()
//上周
DateUtil.lastWeek()
//下周
DateUtil.nextWeek()
//上个月
DateUtil.lastMonth()
//下个月
DateUtil.nextMonth()
日期时间差
Date date1 = DateUtil.parse("2019-09-20 17:35:35");
Date date2 = DateUtil.parse("2019-09-17 14:35:35");
//这里若date1和date2换位置,输出结果不变:betweenDay = 3
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
其他
//年龄:ageOfNow = 28
int ageOfNow = DateUtil.ageOfNow("1991-01-13");
//是否闰年:leapYear = false
boolean leapYear = DateUtil.isLeapYear(2019);
//当前是否是上午
boolean am = DateUtil.isAM(DateUtil.date());
//当前时间是否在指定时间之后
boolean after = DateUtil.date().isAfter(DateUtil.parse("2023-8-29"));
Convert 类型转换工具类
//转换为字符串
int a = 1;
String aStr = Convert.toStr(a);
//转换为指定类型数组
String[] b = {"1", "2", "3", "4"};
Integer[] bArr = Convert.toIntArray(b);
//转换为日期对象
String dateStr = "2017-05-06";
Date date = Convert.toDate(dateStr);
//转换为列表
String[] strArr = {"a", "b", "c", "d"};
List<String> strList = Convert.toList(String.class, strArr);
StrUtil 类型转换工具类
//判断是否为空字符串
String str = "a.jpg";
boolean empty = StrUtil.isEmpty(str);
boolean blank = StrUtil.isBlank(str);
//false
System.out.println(empty);
//true
System.out.println(blank);
//转换为StringBuilder
StringBuilder builder = StrUtil.builder(str);
builder.append("爱你");
//字符串取反
String reverse = StrUtil.reverse(str);
System.out.println(reverse);
//字符串分割
List<String> split = StrUtil.split(str, "-");
System.out.println(split);
//取出索引位置
int a = StrUtil.indexOf(str, Convert.toChar("是"));
System.out.println(a);
//移除前缀或者后缀
String s = StrUtil.removeSuffix(str,".jpg");
String s1 = StrUtil.removePrefix(str,"a");
System.out.println(s1);
//占位符
String template = "这只是个占位符:{}";
String str2 = StrUtil.format(template, "我是占位符");
System.out.println(str2);
NumberUtil 数字处理工具类
double n1 = 1.236;
double n2 = 1.234;
double result;
//对float、double、BigDecimal做加减乘除操作
result = NumberUtil.add(n1, n2);
result = NumberUtil.sub(n1, n2);
result = NumberUtil.mul(n1, n2);
result = NumberUtil.div(n1, n2);
System.out.println(result);
//保留两位小数(四舍五入)
BigDecimal roundNum = NumberUtil.round(n1, 2);
System.out.println(roundNum);
String n3 = "1.234";
//判断是否为数字、整数、浮点数
System.out.println(NumberUtil.isNumber(n3));
System.out.println(NumberUtil.isInteger(n3));
System.out.println(NumberUtil.isDouble(n3));
BeanUtil JavaBean的工具类
Dog dogs = new Dog("小名", "女");
Map<String, Object> map = BeanUtil.beanToMap(dogs);
System.out.println(map);
Dog dog = BeanUtil.mapToBean(map, Dog.class, false);
System.out.println(dog);
Dog copyDog = new Dog();
BeanUtil.copyProperties(dogs, copyDog,"sex");
System.out.println(copyDog.getName());
System.out.println(copyDog.getSex());
dogs.setName("小瓜");
System.out.println(copyDog.getName());
System.out.println(copyDog.getSex());
如果不为空则拷贝数据
//如果为空则不拷贝
Dog dogs1 = new Dog("小名", null);
Map<String, Object> map1 = BeanUtil.beanToMap(dogs1, MapUtil.newHashMap(), CopyOptions.create().setIgnoreNullValue(true));
System.out.println(map1);
输出:{name=小名}
CollUtil 集合操作的工具类
//数组转换为列表
String[] array = new String[]{"a", "b", "c", "d", "e"};
List<String> list = CollUtil.newArrayList(array);
//join:数组转字符串时添加连接符号
String joinStr = CollUtil.join(list, ",");
System.out.println(joinStr);
//将以连接符号分隔的字符串再转换为列表
List<String> splitList = StrUtil.split(joinStr, ',');
System.out.println(splitList);
//创建新的Map、Set、List
HashSet<Object> newHashSet = CollUtil.newHashSet();
ArrayList<Object> newList = CollUtil.newArrayList();
//判断列表是否为空 list!=null && list.size()!=0
System.out.println(CollUtil.isEmpty(newList));
List<String> list1 = null;
System.out.println(CollUtil.isEmpty(list1));
MapUtil Map操作工具类
//将多个键值对加入到Map中
Map<Object, Object> map = MapUtil.of(new String[][]{
{"key1", "value1"},
{"key2", "value2"},
{"key3", "value3"}
});
//判断Map是否为空
System.out.println(MapUtil.isEmpty(map));
ArrayUtil 数组工具
//判断空 和 非空
int[] a = {};
int[] b = null;
System.out.println(ArrayUtil.isEmpty(a));
System.out.println(ArrayUtil.isEmpty(b));
//新建泛型数组
String[] newArray = ArrayUtil.newArray(String.class, 3);
//泛型数组调用原生克隆
Integer[] b1 = {1,2,3};
Integer[] cloneB = ArrayUtil.clone(b1);
System.out.println(Arrays.toString(cloneB));
ObjectUtil 对象工具
ObjectUtil .isEmpty()
ObjectUtil .isnull()
hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别_HCAN学Java的博客-CSDN博客
IdUtil 唯一ID工具
// UUID
//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();
RandomUtil 随机工具
//例如我们想产生一个[10, 100)的随机数
int c = RandomUtil.randomInt(10, 100);
//随机获得列表中的一定量的不重复元素,返回Set
Set<Integer> set = RandomUtil.randomEleSet(CollUtil.newArrayList(1, 1, 3, 4, 5, 6), 2);
System.out.println(set);
//获得一个随机的字符串(只包含数字和字符)
System.out.println(RandomUtil.randomString(2));
//RandomUtil.randomNumbers 获得一个只包含数字的字符串
身份证工具-IdcardUtil
String ID_18 = "321083197812162119";
//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
System.out.println(valid);
DateTime date = DateUtil.parse("2017-04-10");
int age = IdcardUtil.getAgeByIdCard(ID_18, date);
System.out.println(age);
String birth = IdcardUtil.getBirthByIdCard(ID_18);
System.out.println(birth);
String province = IdcardUtil.getProvinceByIdCard(ID_18);
System.out.println(province);
DesensitizedUtil脱敏
// 5***************1X
System.out.println(DesensitizedUtil.idCardNum("51343620000320711X", 1, 3));
//180****1999
System.out.println(DesensitizedUtil.mobilePhone("18049531999"));
//比如密码,只保留了位数信息,**********
System.out.println(DesensitizedUtil.password("1234567890"));
Dict
dict继承了HashMap类,key是string类型,value是Object类型
public static void main(String[] args) {
Dict set = Dict.create()
.set("name", "lyt")
.set("age", 23);
System.out.println(set);
}
文件操作工具FileUtil
7hutool实战:FileUtil 文件工具类(100多个文件常用操作方法)_hutool fileutil-CSDN博客
二维码生成工具 QrCodeUtil
File file = FileUtil.file("C:\\Users\\lyt\\Desktop\\备份\\my.png");
QrCodeUtil.generate("hahaha", 100, 100, file);
Stream流
使用Lamda表达式出现空指针异常解决方案
开发总结实用Tips
List添加元素时指定索引
public static void main(String[] args) {
ArrayList<String> list = CollUtil.newArrayList();
List<String> list1 = Arrays.asList("i1", "i2");
list.add("p1");
list.add("p2");
list.add("p3");
list.add(0, "d1");
list.addAll(1, list1);
for (String s : list) {
System.out.println(s);
}
}
运行结果:
d1
i1
i2
p1
p2
p3
BigDecimal
注意:使用BigDecimal创建double数据类型时使用String类型传值(当double必须用作BigDecimal的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,将double转换为String。要获取该结果,请使用static valueOf(double)方法。)
处理小数
setScale()
setScale(1) 表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入(5则向上入),2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入(5则向下舍),2.35变成2.3
例子
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("2.255");
BigDecimal divide = bigDecimal.divide(BigDecimal.valueOf(1), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(divide);
}
比较大小
if(a.compareTo(b) == -1){
System.out.println("a小于b");
}
if(a.compareTo(b) == 0){
System.out.println("a等于b");
}
if(a.compareTo(b) == 1){
System.out.println("a大于b");
}
if(a.compareTo(b) > -1){
System.out.println("a大于等于b");
}
if(a.compareTo(b) < 1){
System.out.println("a小于等于b");
}
spilt()方法,分割空格或者/的数据
tciket.getName().split(" |/");