uacs2024

导航

Java基础6 其他API

DateTime

OtherApiDemo1_DateTime.java

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class OtherApiDemo1_DateTime {
    public static void main(String[] args) {
        // 目标:掌握java提供的获取时间的方案
        // JDK 8之前的方案:Date获取此刻日期时间老项目还有。
        Date d = new Date();
        System.out.println(d);//Sat Jun 07 18:23:26 CST 2025

        // 格式化:SimpleDateFormat简单日期格式化,格式化日期对象成为我们指定的格式。
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 EEE a");//只能是yyyy MM dd HH mm ss EEE a
        String result = sdf.format(d);
        System.out.println(result);//2025年06月07日 18时23分26秒 星期六 下午
        System.out.println(d.getYear() + 1900);//2025
        System.out.println("--------------------------------------------------");

        // JDK 8之后的方案:LocalDate LocalTime LocalDateTime 获取此刻日期时间 新项目推荐。
        // 获取此刻日期时间对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);//2025-06-07T18:23:26.622021600
        System.out.println(ldt.getYear());//2025
        System.out.println(ldt.getMonthValue());//6
        System.out.println(ldt.getDayOfMonth());//7
        System.out.println(ldt.getDayOfYear());//158
        System.out.println(ldt.getDayOfWeek());//SATURDAY
        System.out.println(ldt.getDayOfWeek().getValue());//6

        // 格式化:DateTimeFormatter
        // 1、创建一个格式化对象
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss EEE a");
        String result2 = dtf.format(ldt);
        System.out.println(result2);//2025/06/07 18:23:26 星期六 下午
    }
}

 

 

StringBuilder

OtherApiDemo2_StringBuilder.java

public class OtherApiDemo2_StringBuilder {
    public static void main(String[] args) {
        // 目标:高效拼接字符串。
        // +号拼接字符串内容,如果是大量拼接,效率极差!String的对象是不可变变量,每次拼接都会产生新的对象

        long startTime = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 100000; i++) {
            s += "abc";
        }
        long endTime = System.currentTimeMillis();
        System.out.println("+号拼接字符串耗时:" + (endTime - startTime) + "ms");//1485ms
        
        // 定义字符串可以使用String类型,但是操作字符串建议大家用StringBuilder(性能好)
        //StringBuilder 不是线程安全的,注意单线程使用
        StringBuilder sb1 = new StringBuilder();
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            sb1.append("abc");
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder拼接字符串耗时:" + (endTime - startTime) + "ms");//4ms
        //System.out.println(sb1);//StringBuilder对象可以直接打印
        String s1 = sb1.toString();

        //线程安全的StringBuilder
        StringBuilder sb2 = new StringBuilder();
        Object lock = new Object(); // 同步锁对象
        String s2;
        synchronized (lock){
            s2 = sb2.append("abc").append("efg").toString();
        }
        System.out.println(s2);
    }
}

res

+号拼接字符串耗时:1485ms
StringBuilder拼接字符串耗时:4ms
abcefg

 

 

BigDecimal

OtherApiDemo3_BigDecimal.java

import java.math.BigDecimal;
import java.math.RoundingMode;

public class OtherApiDemo3_BigDecimal {
    public static void main(String[] args) {
        //// 目标:掌握BigDecimal解决小数运算结果失真问题。
        double d1 = 0.1;
        double d2 = 0.2;
        System.out.println(d1 + d2);//0.30000000000000004
        System.out.println(d1 + d2 == 0.3);//false

        System.out.println("----------------------------------------------------");

        // 如何解决呢?使用BigDecimal
        // 1、把小数包装成BigDecimal对象来运算才可以。
        // 必须使用 public BigDecimal(string val)字符串构造器才能解决失真问题
        BigDecimal bd = new BigDecimal(Double.toString(0.5));

        //优化方案,可以直接调用valueOf方法,内部使用的就是public BigDecimal(String val)字符串构造器
        BigDecimal a1 = BigDecimal.valueOf(0.1);
        BigDecimal b1 = BigDecimal.valueOf(0.2);
        BigDecimal c1 = a1.add(b1);
        System.out.println(c1);//0.3
        double c2 = c1.doubleValue();
        System.out.println(c2);//0.3
        System.out.println(c1.doubleValue() == 0.3);//true

        System.out.println("----------------------------------------------------");

        //BigDecimal除法
        BigDecimal a3 = new BigDecimal("0.1");
        BigDecimal b3 = new BigDecimal("0.3");
        //BigDecimal c3 = a3.divide(b3);0.1/0.3除不尽,直接这样会报错
        BigDecimal c31 = a3.divide(b3,6,BigDecimal.ROUND_HALF_UP);//保留6位小数,四舍五入//不推荐已过时
        BigDecimal c3 = a3.divide(b3, 6, RoundingMode.HALF_UP); // 保留6位小数,四舍五入//使用 RoundingMode 枚举类更加符合现代Java编程规范。
        System.out.println(c3);
    }
}

res

0.30000000000000004
false
----------------------------------------------------
0.3
0.3
true
----------------------------------------------------
0.333333

 

posted on 2025-06-07 19:36  ᶜʸᵃⁿ  阅读(7)  评论(0)    收藏  举报