1.Math类
Math 类提供了用于执行基本数学运算的方法,均为静态方法,直接通过类名调用。
| 功能 | API 示例 | 备注 |
|---|---|---|
| 求绝对值 | Math.abs(x) | 支持 int, long, float, double |
| 求幂次 | Math.pow(x, p) | $x^p$(x 为底数,p 为指数),返回 double |
| 求开平方根 | Math.sqrt(x) | $\sqrt{x}$,返回 double |
| 求最大值 | Math.max(a, b) | 返回 a 和 b 中较大的那个数 |
| 求最小值 | Math.min(a, b) | 返回 a 和 b 中较小的那个数 |
| 四舍五入 | Math.round(x) | 原理是$x + 0.5$后向下取整 |
2.包装类
2.1.对应关系
包装类使基本数据类型具备了面向对象的特性(如能放入集合、作为泛型等)。
-
byte$\rightarrow$Byte -
short$\rightarrow$Short -
int$\rightarrow$Integer -
long$\rightarrow$Long -
float$\rightarrow$Float -
double$\rightarrow$Double -
char$\rightarrow$Character -
boolean$\rightarrow$Boolean
2.2.核心操作
自动装箱(基本类型 $\rightarrow$ 包装类):
Integer x = 10; // 编译器自动实现:Integer.valueOf(10)
字符串转基本类型(实现计算):
int x = Integer.parseInt("123");
double y = Double.parseDouble("3.14");
3.时间与日期类
3.1.Date类
核心作用: 主要用于表示特定的瞬间(精确到毫秒),常用于计算时间差。
时间戳原理: 计算机内部以 1970年1月1日 00:00:00 GMT 为基准(即 0),每过 1 毫秒数字加 1。
常用代码:
Date d = new Date();
long time = d.getTime(); // 返回当前时间的毫秒数(时间戳)
3.2.Calendar类
核心作用: 用于获取或修改年、月、日、时、分、秒。支持自动进位计算。
常用代码:
Calendar cal = Calendar.getInstance();
// 获取时间(注意:Calendar 内部月份从 0 开始计数,即 0 代表 1 月)
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 💡 修正:获取后再加 1,不要写在 get() 里面
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY); // 24小时制
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
// 修改时间(支持自动进位,如 1月31日 加 30 天会自动变成 3月)
cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 30);
3.3.Date与Calendar互相转换
Date d = new Date();
Calendar cal = Calendar.getInstance();
// 1. Date 转 Calendar
cal.setTime(d);
// 2. Calendar 转 Date
Date d2 = cal.getTime();
4.SimpleDateFormat
核心作用: 实现 Date 对象与 String 字符串之间的相互转换。
常见格式模式: "yyyy-MM-dd HH:mm:ss"(HH 表示24小时制,hh 表示12小时制)。
4.1.格式化(Format): Date $\rightarrow$ String
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(d);
System.out.println(str); // 输出格式如: 2026-06-01 16:09:58
4.2.解析(Parse): String $\rightarrow$ Date
⚠️ 注意:
parse 方法会抛出ParseException 编译时异常,必须进行异常处理(try-catch 或throws)。
String str = "2026-04-01 12:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = sdf.parse(str);
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace(); // 字符串格式与 pattern 不符时触发
}
5.实战案例:计算时间差
通过获取两个时间点的毫秒级时间戳,计算相差的具体小时和分钟:
// 模拟两个时间点(此处以相隔一段时间的示例为准)
Date d1 = new Date();
// ... 期间执行了某些操作,或者读取了另一个时间 ...
Date d2 = new Date();
long diff = d2.getTime() - d1.getTime(); // 1. 获取毫秒级时间差
long diffSec = diff / 1000; // 2. 转换为总秒数
long diffMin = diffSec / 60; // 3. 转换为总分钟数
// 4. 拆分为 "XX小时XX分钟"
long diffPastHour = diffMin / 60; // 💡 修正:使用 long 类型保持一致
long diffPastMin = diffMin % 60;
System.out.println("经过了 " + diffPastHour + " 小时 " + diffPastMin + " 分钟");

Comments NOTHING