数学与日期

本课学习Java中的数学运算和日期时间处理。

Math类

Math类提供了常用的数学运算方法,所有方法都是静态的。

常用方法

方法 说明 示例
abs() 绝对值 Math.abs(-5) → 5
max() 最大值 Math.max(3, 5) → 5
min() 最小值 Math.min(3, 5) → 3
ceil() 向上取整 Math.ceil(3.2) → 4.0
floor() 向下取整 Math.floor(3.8) → 3.0
round() 四舍五入 Math.round(3.5) → 4
sqrt() 平方根 Math.sqrt(16) → 4.0
pow() 幂运算 Math.pow(2, 3) → 8.0
random() 随机数 Math.random() → [0.0, 1.0)

示例:Math使用

JAVA
public class MathDemo {
    public static void main(String[] args) {
        // 绝对值
        System.out.println("abs(-5) = " + Math.abs(-5));  // 5
        
        // 最大最小值
        System.out.println("max(3, 5) = " + Math.max(3, 5));  // 5
        System.out.println("min(3, 5) = " + Math.min(3, 5));  // 3
        
        // 取整
        System.out.println("ceil(3.2) = " + Math.ceil(3.2));  // 4.0
        System.out.println("floor(3.8) = " + Math.floor(3.8));  // 3.0
        System.out.println("round(3.5) = " + Math.round(3.5));  // 4
        
        // 幂运算
        System.out.println("sqrt(16) = " + Math.sqrt(16));  // 4.0
        System.out.println("pow(2, 3) = " + Math.pow(2, 3));  // 8.0
    }
}
▶ 试一试

生成随机数

JAVA
public class RandomDemo {
    public static void main(String[] args) {
        // 0.0到1.0之间的随机数
        double r1 = Math.random();
        System.out.println("随机数:" + r1);
        
        // 1到100之间的随机整数
        int r2 = (int) (Math.random() * 100) + 1;
        System.out.println("1-100随机数:" + r2);
        
        // 指定范围的随机数(min到max)
        int min = 10, max = 50;
        int r3 = (int) (Math.random() * (max - min + 1)) + min;
        System.out.println(min + "-" + max + "随机数:" + r3);
    }
}

常量

常量 说明
Math.PI 圆周率 3.141592653589793
Math.E 自然常数 2.718281828459045

示例:计算圆的面积

JAVA
public class CircleArea {
    public static double area(double radius) {
        return Math.PI * Math.pow(radius, 2);
    }
    
    public static void main(String[] args) {
        double radius = 5;
        System.out.printf("半径%.1f的圆面积:%.2f%n", radius, area(radius));
        // 半径5.0的圆面积:78.54
    }
}
▶ 试一试

日期时间API(Java 8+)

Java 8引入了新的日期时间API,更易用。

LocalDate:日期

JAVA
import java.time.LocalDate;

public class LocalDateDemo {
    public static void main(String[] args) {
        // 今天
        LocalDate today = LocalDate.now();
        System.out.println("今天:" + today);  // 2026-06-24
        
        // 指定日期
        LocalDate birthday = LocalDate.of(2000, 1, 15);
        System.out.println("生日:" + birthday);
        
        // 获取字段
        System.out.println("年:" + today.getYear());
        System.out.println("月:" + today.getMonthValue());
        System.out.println("日:" + today.getDayOfMonth());
        System.out.println("星期:" + today.getDayOfWeek());
    }
}

LocalTime:时间

JAVA
import java.time.LocalTime;

public class LocalTimeDemo {
    public static void main(String[] args) {
        // 现在
        LocalTime now = LocalTime.now();
        System.out.println("现在:" + now);  // 14:30:45.123
        
        // 指定时间
        LocalTime meeting = LocalTime.of(14, 30);
        System.out.println("会议时间:" + meeting);
        
        // 获取字段
        System.out.println("时:" + now.getHour());
        System.out.println("分:" + now.getMinute());
        System.out.println("秒:" + now.getSecond());
    }
}

LocalDateTime:日期时间

JAVA
import java.time.LocalDateTime;

public class LocalDateTimeDemo {
    public static void main(String[] args) {
        // 当前日期时间
        LocalDateTime now = LocalDateTime.now();
        System.out.println("现在:" + now);
        
        // 指定日期时间
        LocalDateTime meeting = LocalDateTime.of(2026, 6, 25, 14, 30);
        System.out.println("会议:" + meeting);
    }
}

日期运算

JAVA
import java.time.LocalDate;

public class DateCalc {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        
        // 加减天数
        LocalDate tomorrow = today.plusDays(1);
        LocalDate lastWeek = today.minusWeeks(1);
        LocalDate nextMonth = today.plusMonths(1);
        
        System.out.println("今天:" + today);
        System.out.println("明天:" + tomorrow);
        System.out.println("上周:" + lastWeek);
        System.out.println("下月:" + nextMonth);
        
        // 日期比较
        LocalDate date1 = LocalDate.of(2026, 1, 1);
        LocalDate date2 = LocalDate.of(2026, 12, 31);
        System.out.println("date1在date2之前:" + date1.isBefore(date2));
        System.out.println("date1在date2之后:" + date1.isAfter(date2));
    }
}

日期格式化

JAVA
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateFormat {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        
        // 格式化
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formatted = now.format(formatter);
        System.out.println("格式化:" + formatted);
        
        // 解析
        LocalDateTime parsed = LocalDateTime.parse("2026-06-25 14:30:00", formatter);
        System.out.println("解析:" + parsed);
    }
}

常用格式化模式

模式 说明 示例
yyyy 2026
MM 06
dd 25
HH 时(24小时) 14
mm 30
ss 45

示例:计算年龄

JAVA
import java.time.LocalDate;
import java.time.Period;

public class AgeCalculator {
    public static int calculateAge(LocalDate birthday) {
        LocalDate today = LocalDate.now();
        Period period = Period.between(birthday, today);
        return period.getYears();
    }
    
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(2000, 1, 15);
        int age = calculateAge(birthday);
        System.out.println("年龄:" + age);
    }
}

示例:计算天数差

JAVA
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class DaysBetween {
    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2026, 1, 1);
        LocalDate end = LocalDate.of(2026, 12, 31);
        
        long days = ChronoUnit.DAYS.between(start, end);
        System.out.println("天数差:" + days);  // 364
    }
}

❓ 常见问题

Q Math.random()的范围是什么?
A [0.0, 1.0),包含0.0但不包含1.0。
Q LocalDate和Date有什么区别?
A LocalDate是Java 8的新API,不可变、线程安全。Date是旧API,可变、非线程安全。推荐用LocalDate。
Q 如何获取当前时间戳?
A System.currentTimeMillis() 获取毫秒时间戳,或 Instant.now() 获取Instant对象。

📖 小节

📝 作业

  1. 随机数: 生成10个1-100的随机数,求最大值、最小值、平均值
  2. 日期计算: 计算从今天到2027年1月1日还有多少天
  3. 年龄计算器: 输入出生日期,计算年龄和距离下一个生日还有多少天

下一课

下一课我们将学习 实战:字符串处理,综合运用字符串相关知识。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏