BigDecimal
一般使用与金额的计算。 注意: 1、当与0进行乘除操作会出现异常。 2、当进行 / 操作的时候,如果小数点除不尽也将会报错。请注意小数点的截取。
基本操作
/**
* BiDecimal.ROUND_UP :向上取数,只要小数点后面不为0,前面就会+1,如:23.31--->23.4
* (常用)ROUND_DOWN:向下截取, 直接丢弃小数点后面的数值
* ROUND_CEILING:如果数字为+,那么就是ROUND_UP模式,如果为-,那么就是ROUND_DOWN模式,(不会减少值)
* ROUND_FLOOR:如果数字为+,那么就是ROUND_DOWN模式,如果为-,那么就是ROUND_UP模式,(不会增加值)
* (常用)ROUND_HALF_UP:四舍五入模式,如:23.31--->23.3; 23.35--->23.4
* ROUND_HALF_DOWN:四舍六入模式,如:23.35--->23.3; 23.36--->23.34
* ROUND_HALF_EVEN:如果左边数值为奇,那么就是ROUND_HALF_UP(“四舍五入”)模式,如果为偶,那么就是ROUND_HALF_DOWN(四舍六入)模式;
* 如:12.85--->12.8 ; 23.35-->23.4
* ROUND_UNNECESSARY:断言不需要舍入:(用来判断是否需要舍入,如果不需要摄入则会报错.ArithmeticException)
* 如:我想要结果为12.1 但是结果是12.12 那么,我使用dc.setScale(1, BigDecimal.ROUND_UNNECESSARY);就会报错
*/
BigDecimal dc = new BigDecimal("12.88");
BigDecimal de2 = new BigDecimal("23.33");
// -1:小于 0:等于 1:大于
int i = dc.compareTo(de2);
//除以
// BigDecimal divide = dc.divide(de2);
dc.divide(de2,2,BigDecimal.ROUND_DOWN);
//乘以
BigDecimal multiply = dc.multiply(de2);
//加减
BigDecimal add = dc.add(de2);
BigDecimal subtract = dc.subtract(de2);
//保留小数点
dc.setScale(2,BigDecimal.ROUND_UP);
日期类
格式:yyyy-MM-dd HH:mm:ss
jdk7
- java.util.Date
- java.util.Calendar
- java.text.SimpleDateFormat
综合使用
Date:此类多种方法已经过时。因此不推荐使用,查看具体方法看参考jdk文档
//获取实例,
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//格式化 日期
String format = sdf.format(date);
//字符串转换日期
Date parse = sdf.parse("2024-01-12 00:00:00");
//日历类
Calendar calendar = Calendar.getInstance();
//获取年份
calendar.get(Calendar.YEAR);
//获取月份0~11
int i = calendar.get(Calendar.MONTH)+1;
//设置年份
calendar.set(Calendar.YEAR,2023);
//加减日期
calendar.add(Calendar.YEAR,1);
calendar.add(Calendar.YEAR,-1);
Date time = calendar.getTime();
Canlender 参数
Calendar.YEAR //表示年份
Calendar.MONTH //表示月份
Calendar.DATE //表示当前时间为多少号(日历式的多少号)
Calendar.HOUR //表示小时(12小时制)
Calendar.HOUR_OF_DAY //表示小时(24小时制)
Calendar.MINUTE //表示分钟数
Calendar.SECOND //表示秒数
Calendar.MILLENSECOND //表示毫秒数
Calendar.WEEK_OF_MONTH //当前时间是所在当前月的第几个星期(日历式的第几周)
Calendar.WEEK_OF_YEAR //当前时间是所在当前年的第几个星期
Calendar.DAY_OF_WEEK_IN_MONTH //当前时间是所在当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
Calendar.DAY_OF_WEEK //一周七天中,当前时间是一周中的第几天
Calendar.DAY_OF_YEAR //表示一年中的第几天
Calendar.DAY_OF_MONTH //表示一个月中的第几天,结果等同于Calendar.DATE
Calendar.AM_PM //表示是上午还是下午
Calendar.SUNDAY //周日
Calendar.MONDAY //周一
Calendar.TUESDAY //周二
Calendar.WEDNSDAY //周三
Calendar.THURSDAY //周四
Calendar.FRIDAY //周五
Calendar.SATURDAY //周六
jdk8
- LocalDate
- LocalTime
- LocalDateTime
- DateTimeFormatter
- Duration
基本使用
/**
* 以下示例为 LocalDateTime ; LocalDate,LocalTime也同理
*/
LocalDate date = LocalDate.now();//2023-01-15
LocalTime time = LocalTime.now();//10:50:07.475
LocalDateTime dateTime = LocalDateTime.now();//2023-01-15T10:50:07.475
LocalDateTime designDate = LocalDateTime.of(2025, 06, 06, 12, 12, 12);//指定时间实例化
//获取时间
int year = dateTime.getYear();//年
int monthValue = dateTime.getMonthValue();//月
int dayOfMonth = dateTime.getDayOfMonth();//日
int minute = dateTime.getMinute();//分钟
int second = dateTime.getSecond();//秒
//修改具体字段时间值
dateTime.withYear(2023);
//具体字段时间相 加减
dateTime.plusDays(1);
dateTime.minusDays(1);
//小于-1,等于0,大于1
int i = designDate.compareTo(dateTime);//对比
DateTimeFormatter
日期类格式化
/**
* 格式化日期
*/
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDate = dateTime.format(formatter);
Duration
日期类插值计算
/**
* During获取时间差
*/
Duration between = Duration.between(dateTime, designDate);//后面-前面
between.toDays();//相差天数
between.toHours();//相差小时
between.toMinutes();//分钟
常用注解-jackson
以下注解使用,需要基于 <--jackson包-->
//解决返回丢失精度问题
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long createdBy;
//格式化时间
//入参
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private date createAt;
//出参
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
//json转换
String jsonString = JSON.toJSONString(photos);
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.0</version>
</dependency>
日常工具包使用
spring包
StringUtils ObjectUtils BeanUtils CollectionUtils
//字符串判断null and ""
StringUtils.hasText(str);
//对象判断null
ObjectUtils.isEmpty(people);
//对象批量复制,注意:依赖于set,get;并且字段类型要一致。
BeanUtils.copyProperties(source,target);
JDK自带
java.util.xx Arrays:数组工具类 Objects:对象工具类 Collections:集合工具类
//转换list
Arrays.stream(array).boxed().collect(Collectors.toList());
//排序-快排
Arrays.sort(arrays);
//对比
Arrays.equals(arr1,arr2);
//复制
int[] ints = Arrays.copyOf(array, array.length);
//输出
String s = Arrays.toString(ints);
//对象
Objects.isNull(object);
//对比
Objects.equals(ob1,ob2);
函数式接口
简记事项:
- 一个函数式接口只包含一个抽象方法
- 可以包含多个默认方法
- 可以包含多个静态方法
如:
//如:Comparator ,默认方法
t1:第二个数值
t2:第一个数值
//大--->小
list.sort((t1,t2)->{
System.out.print("t1:"+t1);
System.out.println("-------t2--"+t2);
return t2-t1;
});
调用Comparator中的静态方法 默认实现为从小-大
list.sort(Comparator.comparing(t1->t1));
等同于上面
list.sort(Comparator.comparing(Integer::intValue));
参考文章:
String
String str = "1,32,34,%s";
//前包,后不包
System.out.println(str.substring(0,7)); --1,32,34
//获取最后一次出现 - 的下标,获取不到为-1
System.out.println(str.lastIndexOf("-"));
//替换, 为 -
str.replace(",","-");
//字符串格式
String.format(str,"cc");
//根据特定字符,分割为数字
String[] split = str.split(",");