欢迎光临
我们一直在努力

初始java(十七):常⽤⼯具类介绍

目录

一:⽇期相关类

1.Date类

2.LocalDateTime类

1.创建LocalDateTime对象

2.常⽤⽅法-获取当前⽇期

3.常⽤⽅法-获取当前年⽉⽇

4.常⽤⽅法-创建指定的⽇期

5.常⽤⽅法-根据字符串创建⽇期

6.常⽤⽅法-获取具体详细信息

7.常⽤⽅法-⽇期运算

8.常⽤⽅法-根据当前时间获取指定时间

二:BigDecimal类

1.常⽤的构造⽅法

2.常⽤⽅法-加减乘

3.常⽤⽅法-除


                                                  个人博客主页          

                                                  个人Gitee仓库          

内容大纲:

本文介绍了Java中两个重要的工具类:1. 日期时间类:对比了传统的Date类(已过时)和Java 8引入的LocalDateTime类,详细说明后者创建对象、获取日期时间信息、格式化解析、日期运算等常用方法;2. BigDecimal类:讲解其精确计算特性、不同构造方法差异(推荐使用String构造),并演示加减乘除运算,特别强调除法运算中精度处理和舍入模式设置的重要性。全文通过代码示例展示各类的核心用法,是Java基础编程中日期处理和精确计算的实用指南。

一:⽇期相关类

1.Date类

Date类是Java早期版本中⽤于表⽰⽇期和时间的类,位于 java.util 包中。它表⽰⼀个特定的⽇期 和时间,精确到毫秒级别。

官⽅提供的帮助⽂档⼿册:https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Date.html

常⻅的构造⽅法如下:

我们可以看到部分⽅法已经过时。

import java.util.Date;

public class Test {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1);

Date date2 = new Date(123,2,5);//已过时
System.out.println(date2);
}
}

输出:

Date date2 = new Date(123,2,5); 该⽅法中,需要注意参数的意义:

  • 参数⼀:Date默认的时间是从1900年开始计算的,这⾥的123会和1900相加得到2023,⽤来确定 年份
  • 参数⼆:2代表3⽉,也就是说0代表1⽉,1代表2⽉,以此类推
  • 参数三:代表实际的⽇期
    • CST:代表时区
    • 不带参数的构造⽅法表⽰获取的是当前的时间如:15:30:46
    • 给定参数后,没有指定时间,默认是00:00:00

    当我们查看源码后发现,很多⽅法都已经过时了。⽬前我们使⽤更多的是LocalDateTime类。所以, 我们重点要看看这个类!!

    2.LocalDateTime类

    LocalDateTime 是Java 8引⼊的⽇期类

    官⽅⼿册:https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/LocalDateTime.html

    LocalDateTime 类只有⼀个私有的构造⽅法,共其内部进⾏调⽤。

    1.创建LocalDateTime对象

    public static void main(String[] args) {
    //当前日期和时间
    LocalDateTime now = LocalDateTime.now();
    System.out.println(now);
    //指定日期和时间
    LocalDateTime dateTime = LocalDateTime.of(2023, 5, 15, 10, 30);
    System.out.println(dateTime);
    //字符串解析
    LocalDateTime parsed = LocalDateTime.parse("2023-05-15T10:30:00");
    System.out.println(parsed);
    }

    输出:

    2.常⽤⽅法-获取当前⽇期

    public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(" 当前时间为: "+dateTime );
    }

    输出:

    3.常⽤⽅法-获取当前年⽉⽇

    public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.now();

    int year = dateTime.getYear();
    int month = dateTime.getMonthValue();
    int day = dateTime.getDayOfMonth();
    int hour = dateTime.getHour();
    int minute = dateTime.getMinute();
    int second = dateTime.getSecond();
    System.out.println(" 年: " + year);
    System.out.println("⽉: " + month);
    System.out.println("⽇: " + day);
    System.out.println(" 时: " + hour);
    System.out.println(" 分: " + minute);
    System.out.println(" 秒: " + second);
    }

    输出:

    4.常⽤⽅法-创建指定的⽇期

    public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.of(1999, 5, 15, 10, 30);
    System.out.println(" 当前⽇期为: "+dateTime);
    }

    输出:

    5.常⽤⽅法-根据字符串创建⽇期

    public static void main(String[] args) {
    // 原始字符串
    String stringDate = "2026-10-01 10:30:21";

    // 修正点:将 "yyyy MM-dd" 改为 "yyyy-MM-dd" 以匹配字符串中的横杠
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    LocalDateTime date = LocalDateTime.parse(stringDate, dateTimeFormatter);

    System.out.println("当前日期为: " + date);
    }

    输出:

    需要注意的是这⾥⼀定是: yyyy-MM-dd HH:mm:ss ⼤⼩写需要注意。

    6.常⽤⽅法-获取具体详细信息

    获取本周周⼏、本⽉第⼏天,当年第⼏天

    public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(" 当前⽇期为: "+dateTime);
    System.out.println(" 本周周⼏: "+dateTime.getDayOfWeek().getValue());
    System.out.println(" 本⽉第⼏天: "+dateTime.getDayOfMonth());
    System.out.println(" 当年第⼏天: "+dateTime.getDayOfYear());
    }

    输出:

    7.常⽤⽅法-⽇期运算

    增加、减少天数

    public static void main(String[] args) {
    LocalDateTime dateTime = LocalDateTime.now();
    LocalDateTime newDatePlus = dateTime.plusDays(1);
    System.out.println(" 增加 1 天后的⽇期: "+newDatePlus);
    LocalDateTime newDateMinus = dateTime.minusDays(1);
    System.out.println(" 减少 1 天后的⽇期: "+newDateMinus);
    }

    输出:

    8.常⽤⽅法-根据当前时间获取指定时间

    获取当前⽇期所在周的周⽇和周⼀

    public static void main(String[] args) {
    LocalDateTime currentDate = LocalDateTime.now();
    LocalDateTime firstDayOfWeek =currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
    LocalDateTime lastDayOfWeek =currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
    System.out.println(firstDayOfWeek);
    System.out.println(lastDayOfWeek);
    }

    输出:

    • previousOrSame:寻找当前⽇期或之前最近的指定星期⼏
    • nextOrSame:寻找当前⽇期或之后最近的指定星期⼏

    二:BigDecimal类

    BigDecimal是Java在java.math包中提供的 线程安全的API类,⽤来对超过16位有效位的数进⾏精确 的运算。双精度浮点型变量double可以处理16位有效数,但在实际应⽤中,可能需要对更⼤或者更⼩ 的数进⾏运算和处理。

    官⽅⽂档⼿册:https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigDecimal.html

    1.常⽤的构造⽅法

    构造器描述
    BigDecimal(int) 创建一个具有参数所指定整数值的对象。
    BigDecimal(double) 创建一个具有参数所指定双精度浮点数值的对象。【注意:此构造方法可能会丢失精度】,因为 double 本身存在二进制表示误差,不建议直接使用。
    BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
    BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。这是最推荐、最安全的方式,能完全保留原始数值的精度。

    public static void main(String[] args) {
    BigDecimal doubleNum =new BigDecimal(1.99);
    System.out.println( doubleNum);
    BigDecimal stringNum = new BigDecimal("2.99");
    System.out.println( stringNum);
    }

    输出:

    ⽐较有意思的是,这⾥第⼀个输出的结果⾮常⻓,主要原因是使⽤ new BigDecimal(1.99) 时, 实际上是将⼀个已经被舍⼊的double值传递给了BigDecimal。BigDecimal然后精确地表⽰了这个已 经不精确的double值。

    2.常⽤⽅法-加减乘

    public static void main(String[] args) {
    BigDecimal a =new BigDecimal("1.35");
    BigDecimal b = new BigDecimal("3.22");
    BigDecimal addRet = a.add(b);
    System.out.println(addRet);
    BigDecimal subRet = a.subtract(b);
    System.out.println(subRet);

    BigDecimal mulRet = a.multiply(b);
    System.out.println(mulRet);
    }

    输出:

    注意:

    • 参与运算后会⽣成新的BigDecimal对象

    3.常⽤⽅法-除

    public static void main(String[] args) {
    BigDecimal a =new BigDecimal("1.35");
    BigDecimal b = new BigDecimal("3.22");
    BigDecimal divRet = a.divide(b);
    System.out.println(divRet);
    }

    输出:

    原因:BigDecimal的divide⽅法在进⾏除法运算时,如果结果是⼀个⽆限循环⼩数,就会抛出 ArithmeticException 异常。在你的例⼦中,1.35除以3.22的结果正是⼀个⽆限循环⼩数

    解决⽅案⼀:

    指定精度和舍⼊模式

    public static void main(String[] args) {
    BigDecimal a =new BigDecimal("1.35");
    BigDecimal b = new BigDecimal("3.22");
    BigDecimal divRet = a.divide(b, 4, RoundingMode.HALF_UP);
    System.out.println(divRet);
    }

    输出:

    • 4表⽰除法运算结果的⼩数部分保留4位
    • RoundingMode.HALF_UP代表四舍五⼊

    关于第3个参数属于运算的模式

    常⻅的有:

    构造器描述
    BigDecimal(int) 创建一个具有参数所指定整数值的对象。
    BigDecimal(double) 创建一个具有参数所指定双精度浮点数值的对象。【注意:此构造方法可能会丢失精度】,因为 double 本身存在二进制表示误差,不建议直接使用。
    BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
    BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。这是最推荐、最安全的方式,能完全保留原始数值的精度。

    解决⽅案⼆:使⽤MathContext

    public static void main(String[] args) {
    BigDecimal a = new BigDecimal("1.35");
    BigDecimal b = new BigDecimal("3.22");
    BigDecimal divRet = a.divide(b, new MathContext(4,RoundingMode.HALF_UP));
    System.out.println(divRet);
    }

    输出:

    • newMathContext(4,RoundingMode.HALF_UP),若不指定的情况下默认是: RoundingMode.HALF_UP模式。

    以上就是我们全部的javase的所有内容了,后面就是数据结构了!!!!

    赞(0)
    未经允许不得转载:171主机测评 » 初始java(十七):常⽤⼯具类介绍
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址