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);

函数式接口

简记事项:

  1. 一个函数式接口只包含一个抽象方法
  2. 可以包含多个默认方法
  3. 可以包含多个静态方法

如:

//如: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));

参考文章


参考文章:

Calendar类详解 日期类使用

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(",");