常用 Java API
BigDemical
- 目标 掌握BigDemical的使用,解决小数运算失真的问题。
package com.example.demo;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* @author 14590
*/
public class BigDemicalDemo {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
// 将他们转成字符串在封装成BigDemical 对象
/*BigDecimal a1 = new BigDecimal(Double.toString(a));
BigDecimal b1 = new BigDecimal(Double.toString(b));*/
// 底层将 double 转成字符串,再转换成 BigDemical 对象
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
// 加
BigDecimal add = a1.add(b1);
// 减
BigDecimal subtract = a1.subtract(b1);
// 乘法
BigDecimal multiply = a1.multiply(b1);
System.out.println(add);
System.out.println(subtract);
System.out.println(multiply);
/**
* 除法
* 当结果 是无穷小数,需要规定精度位
*/
BigDecimal divide = a1.divide(b1);
BigDecimal i = BigDecimal.valueOf(0.1);
BigDecimal j = BigDecimal.valueOf(0.3);
// 四舍五入 RoundingMode.HALF_DOWN
BigDecimal divide1 = i.divide(j,2,RoundingMode.HALF_DOWN);
System.out.println(divide1);
System.out.println(divide1.doubleValue());
// 比较 -1 小于 0 等于 1 大于
BigDecimal a2 = BigDecimal.valueOf(0.1);
BigDecimal b2 = BigDecimal.valueOf(0.1);
System.out.println(a2.compareTo(b2));
}
}
新增时间工具
LocalDate
package com.example.demo.jdkAfter8;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalField;
public class LocalDateDemo {
public static void main(String[] args) {
/**
* 传统的 Date 工具 设计不合理(淘汰)
* 1, 设计不合理
* 2,修改过后会的是最初
*/
/**
* 新增 时间工具
*/
// 获取本地日期
LocalDate localDate = LocalDate.now();
// 时间
LocalTime localTime = LocalTime.now();
// 日期加时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localDate.getYear());
System.out.println(localDate.getMonthValue());
System.out.println(localDate.getDayOfMonth());
// 修改时间 withYear,他是返回新的日期对象
LocalDate localDate1 = localDate.withYear(2009);
System.out.println(localDate1+" "+ localDate); // 2009-09-10 2023-09-10
// 加年
LocalDate localDate2 = localDate.plusYears(2);
System.out.println(localDate2); // 2025-09-10
// 减法 minusYears
LocalDate localDate3 = localDate.minusYears(2);
// 获取指定时间对象
LocalDate of = LocalDate.of(2099, 12, 12);
System.out.println(of);
// 判断2个日期对象,是否相等,在前在后 equals,isBefore,isAfter
System.out.println(localDate.isBefore(localDate1));
System.out.println(localDate.isAfter(localDate2));
System.out.println(localTime);
System.out.println(localDateTime);
}
}
LocalTime 与 LocalDate 相同,只是记录时分秒与纳秒
LocalDateTime 包含日期与时分秒等
- 相当于 将前面的2个总结起来的
- 区别在于
带时区的时间
package com.example.demo.jdkAfter8;
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class ZoneIdDemo {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.systemDefault(); // 系统默认时区
System.out.println(zoneId); // Asia/Shanghai 洲名/城市名
// 打印所有时区
System.out.println(ZoneId.getAvailableZoneIds());
// 将某个时间ID 封装成 zoneID 对象
ZoneId of = ZoneId.of("Europe/Monaco");
// 带时间的时区,默认系统当前时间
ZonedDateTime now = ZonedDateTime.now(of);
// 2023-09-10T09:29:42.268+02:00[Europe/Monaco]
System.out.println(now);
// 世界标准时间
ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
// 2023-09-10T07:32:04.988Z
System.out.println(now1);
}
}