数学与日期
本课学习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对象。📖 小节
- Math类提供数学运算方法,都是静态的
- 常用方法:abs/max/min/ceil/floor/round/sqrt/pow/random
- Java 8日期API:LocalDate/LocalTime/LocalDateTime
- 日期运算用plus/minus方法
- 日期格式化用DateTimeFormatter
📝 作业
- 随机数: 生成10个1-100的随机数,求最大值、最小值、平均值
- 日期计算: 计算从今天到2027年1月1日还有多少天
- 年龄计算器: 输入出生日期,计算年龄和距离下一个生日还有多少天
下一课
下一课我们将学习 实战:字符串处理,综合运用字符串相关知识。



