java 常用类
·
Java常用工具类总结
一、日期相关类
1. Date类(传统,部分已过时)
Date类位于java.util包,表示特定的日期和时间,精确到毫秒。
Date date1 = new Date(); // 获取当前时间
Date date2 = new Date(123, 2, 5); // 年份=1900+123=2023,月份=2代表3月
注意:Date类的大部分构造方法已过时,推荐使用LocalDateTime。
2. LocalDateTime类(Java 8+,推荐使用)
2.1 创建LocalDateTime对象
// 当前日期时间
LocalDateTime now = LocalDateTime.now();
// 指定日期时间
LocalDateTime dateTime = LocalDateTime.of(2023, 5, 15, 10, 30);
// 从字符串解析
LocalDateTime parsed = LocalDateTime.parse("2023-05-15T10:30:00");
2.2 获取年月日时分秒
LocalDateTime dt = LocalDateTime.now();
int year = dt.getYear(); // 年
int month = dt.getMonthValue(); // 月
int day = dt.getDayOfMonth(); // 日
int hour = dt.getHour(); // 时
int minute = dt.getMinute(); // 分
int second = dt.getSecond(); // 秒
2.3 获取周/月/年信息
dt.getDayOfWeek().getValue(); // 本周周几(1=周一,7=周日)
dt.getDayOfMonth(); // 本月第几天
dt.getDayOfYear(); // 当年第几天
2.4 日期运算(加减)
dt.plusDays(1); // 加1天
dt.minusDays(1); // 减1天
dt.plusWeeks(1); // 加1周
dt.minusWeeks(1); // 减1周
dt.plusMonths(1); // 加1月
dt.minusMonths(1); // 减1月
dt.plusYears(1); // 加1年
dt.minusYears(1); // 减1年
2.5 获取指定日期(周一、周日、月初、月末)
// 当前日期所在的周一
LocalDateTime monday = dt.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 当前日期所在的周日
LocalDateTime sunday = dt.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
// 当月第一天
LocalDateTime firstDay = dt.with(TemporalAdjusters.firstDayOfMonth());
// 当月最后一天
LocalDateTime lastDay = dt.with(TemporalAdjusters.lastDayOfMonth());
2.6 字符串与LocalDateTime互转
// 字符串 → LocalDateTime
String str = "2026-10-01 10:30:21";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(str, formatter);
// LocalDateTime → 字符串
String result = dt.format(formatter);
注意:格式化字符串中
yyyy-MM-dd HH:mm:ss的大小写敏感。
二、BigDecimal类(精确小数运算)
为什么需要BigDecimal?
float和double存在精度丢失问题,商业计算(金额等)必须使用BigDecimal。
1. 构造方法(推荐使用字符串构造)
// 不推荐:double构造可能丢失精度
BigDecimal d1 = new BigDecimal(1.99); // 结果:1.98999999999999999...
// 推荐:字符串构造,结果精确
BigDecimal d2 = new BigDecimal("1.99"); // 结果:1.99
2. 加减乘运算
BigDecimal a = new BigDecimal("1.35");
BigDecimal b = new BigDecimal("3.22");
BigDecimal addRet = a.add(b); // 加法
BigDecimal subRet = a.subtract(b); // 减法
BigDecimal mulRet = a.multiply(b); // 乘法
注意:运算后会生成新的BigDecimal对象,原对象不变。
3. 除法运算(需指定精度和舍入模式)
// 方式一:直接指定
BigDecimal result = a.divide(b, 4, RoundingMode.HALF_UP); // 保留4位,四舍五入
// 方式二:使用MathContext
BigDecimal result = a.divide(b, new MathContext(4, RoundingMode.HALF_UP));
4. 常用舍入模式
| 模式 | 说明 | 示例 |
|---|---|---|
HALF_UP |
四舍五入(常用) | 1.5→2,1.4→1 |
HALF_DOWN |
五以下舍,五及以上入 | 1.5→1,1.6→2 |
UP |
远离零方向舍入 | 1.5→2,-1.5→-2 |
DOWN |
向零方向舍入 | 1.5→1,-1.5→-1 |
CEILING |
向正无穷方向舍入 | 1.5→2,-1.5→-1 |
FLOOR |
向负无穷方向舍入 | 1.5→1,-1.5→-2 |
三、快速参考表
LocalDateTime常用方法速查
| 方法 | 作用 |
|---|---|
LocalDateTime.now() |
获取当前时间 |
LocalDateTime.of(y,m,d,h,min) |
创建指定时间 |
getYear() / getMonthValue() |
获取年月 |
getDayOfWeek().getValue() |
获取星期几 |
plusDays(n) / minusDays(n) |
加减天数 |
with(TemporalAdjusters.firstDayOfMonth()) |
获取当月第一天 |
BigDecimal常用方法速查
| 方法 | 作用 |
|---|---|
new BigDecimal("字符串") |
创建精确小数 |
add(b) / subtract(b) |
加减法 |
multiply(b) |
乘法 |
divide(b, 位数, 模式) |
除法(需指定精度) |
四、注意事项总结
- Date类部分方法已过时,推荐使用
LocalDateTime - BigDecimal不要用double构造,用字符串构造更精确
- BigDecimal除法必须指定精度和舍入模式,否则无限循环小数会抛异常
- 日期格式化字符串大小写敏感:
yyyy(年)、MM(月)、HH(24小时)、hh(12小时)
更多推荐



所有评论(0)