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

🌸雨落在了我的手上:个人主页

🐟个人仓库:Gitee仓库

❄️个人专栏:<<JaveSe>> <<C语言>> <<C语言数据结构>>**

🔥🔥🔥人生格言:无人扶我青云志,我自踏雪至山巅

🎬 博主简介:

目录

一:⽇期相关类

1.Date类

2.LocalDateTime类

1.创建LocalDateTime对象

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

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

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

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

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

7.常⽤⽅法-⽇期运算

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

二:BigDecimal类

1.常⽤的构造⽅法

2.常⽤⽅法-加减乘

3.常⽤⽅法-除


内容大纲:

本文介绍了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

常⻅的构造⽅法如下:

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

java 复制代码
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); 该⽅法中,需要注意参数的意义:

  1. 参数⼀:Date默认的时间是从1900年开始计算的,这⾥的123会和1900相加得到2023,⽤来确定 年份
  2. 参数⼆:2代表3⽉,也就是说0代表1⽉,1代表2⽉,以此类推
  3. 参数三:代表实际的⽇期
  • 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对象

java 复制代码
    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.常⽤⽅法-获取当前⽇期

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

输出:

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

java 复制代码
    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.常⽤⽅法-创建指定的⽇期

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

输出:

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

java 复制代码
    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.常⽤⽅法-获取具体详细信息

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

java 复制代码
    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.常⽤⽅法-⽇期运算

增加、减少天数

java 复制代码
    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.常⽤⽅法-根据当前时间获取指定时间

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

java 复制代码
    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) 创建一个具有参数所指定以字符串表示的数值的对象。这是最推荐、最安全的方式,能完全保留原始数值的精度。
java 复制代码
    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.常⽤⽅法-加减乘

java 复制代码
    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.常⽤⽅法-除

java 复制代码
    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的结果正是⼀个⽆限循环⼩数

解决⽅案⼀:

指定精度和舍⼊模式

java 复制代码
    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

java 复制代码
    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的所有内容了,后面就是数据结构了!!!!

相关推荐
凤凰院凶涛QAQ1 小时前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
孟华苏1 小时前
怎么快速排查内存泄漏问题
java·开发语言·python
zz34572981131 小时前
C语言中字符串常量存储位置
c语言·开发语言·算法·青少年编程
noipp1 小时前
推荐题目:洛谷 P16510 [GKS 2015 #C] gRanks
java·c语言·开发语言·c++·python·算法
flyinmind1 小时前
Java环境与Android环境中使用QuickJS
java·开发语言·javascript·quickjs
郑洁文1 小时前
基于Python的HTTP服务漏洞信息收集工具设计与实现
开发语言·python·http
不吃鱼的羊1 小时前
DaVinci Developer自动连接
java·开发语言
Evand J2 小时前
【MATLAB例程】VSIMM与IMM在机动目标跟踪中的性能对比,CV+CT双模型
开发语言·matlab·目标跟踪
farerboy2 小时前
15-Java while 和 do...while循环
java·后端