LocalDate和LocalDateTime一些常用方法总结

本文详细介绍了Java中的LocalDate和LocalDateTime类的创建方法、获取年月日星期、加减日期、日期和时间的转化以及计算时间差。同时涵盖了truncatedTo方法和时间前后判断的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LocalDate和LocalDateTime

Localdate创建方法
//获取当前时间
LocalDate localDate = LocalDate.now();
//输入年月日设置时间
LocalDate localDate = LocalDate.of(year,month,day);
Localdate获取年月日星期几
int year = localDate.getYear();
int year = localDate.get(ChronoField.YEAR);
//注意getMonth方法返回的是Month类,可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用
Month month = localDate.getMonth();
int month1 = localDate.get(ChronoField.MONTH_OF_YEAR);
int day = localDate.getDayOfMonth();
int day1 = localDate.get(ChronoField.DAY_OF_MONTH);
//注意getDayOfWeek方法返回的是DayOfWeek类,可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK);
Localdate进行加减日期
LocalDate localDate = LocalDate.now();
//增减一年
localDate = localDate.plusYears(1);//增加
localDate = localDate.plus(1, ChronoUnit.YEARS);
localDate = localDate.minusYears(1);//减少
//减少一个月
localDate = localDate.minusMonths(1);//推荐
localDate = localDate.minus(1, ChronoUnit.MONTHS);
//减少一日
localDate = localDate.minusDays(1);//推荐
localDate = localDate.minus(1, ChronoUnit.DAYS);
//通过使用with方法进行修改
//修改年为2020
localDate = localDate.withYear(2020);
//修改为2020
localDate = localDate.with(ChronoField.YEAR, 2020);
Localdate和LocaldateTime日期转化
//指定一个字符串 转 时间
String  wordGameStartTime ="2019-01-25 00:00:01";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss" );
LocalDateTime dateTime = LocalDateTime.parse(wordGameStartTime,formatter);
//时间 转 字符串
String format5 = localDateTime.format(formatter);
//localDateTime 转 LocalDate
LocalDate localDate = localDateTime.toLocalDate();
//localDateTime 转 LocalTime
LocalTime localTime = localDateTime.toLocalTime();
计算两个LocalDateTime之间的相差的天数
//获取当前时间
LocalDateTime now = LocalDateTime.now();  //2019-1-31
int days= (int)Duration.between(dateTime,now).toDays();
System.out.println(days);   //6 
.truncatedTo

truncatedTo 方法接受一个 TemporalUnit 参数,可以截断日期时间值到该参数指定的时间单位。常用的时间单位包括:ChronoUnit.SECONDS(秒)、ChronoUnit.MINUTES(分)、ChronoUnit.HOURS(小时)、ChronoUnit.DAYS(天)等。

判断时间前后
LocalDate date = LocalDate.now()
LocalDate firstDay = LocalDate.parse("2020-11-11",DateTimeFormatter.ofPattern("yyyy-MM-dd")

date.isBefore(firstDay))
date.isAfter(firstDay);
date.isEqual(firstDay);

### Java 中处理星期天数的最佳实践 在 Java 中,`Calendar`、`Date`、`LocalDate` `LocalDateTime` 是常用的日期时间类。然而,在不同的场景下,这些类的表现各有优劣。 #### 1. **关于旧版 API (`Date`, `Calendar`)** Java 8 之前的日期时间 API(如 `Date` `Calendar`)存在许多不足之处[^3]。这些问题包括但不限于: - 不支持时区。 - 可变性导致线程安全性问题。 - 使用复杂且容易出错。 因此,尽管可以通过 `Calendar` 来实现一些复杂的逻辑操作(例如计算某周的最后一天),但在现代开发中并不推荐继续使用它们。以下是通过 `Calendar` 实现的一个例子: ```java public static String getWeekEndDay() { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); c.add(Calendar.WEEK_OF_YEAR, -1); // 获取上周六 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(c.getTime()); } ``` 虽然上述方法可以工作,但由于其设计上的缺陷,建议优先考虑新的日期时间 API。 --- #### 2. **新版 API 的优势 (`LocalDate`, `LocalDateTime`)** 自 Java 8 起引入的新日期时间 API 提供了更强大、直观的功能来处理日期时间。对于涉及星期天数的操作,新 API 更加简洁高效。 ##### 计算某一周的第一天或最后一天 如果需要计算某一周的第一天或最后一天,可以直接利用 `TemporalAdjusters` 类中的静态方法完成此任务。下面是一个示例代码片段: ```java import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public class WeekExample { public static void main(String[] args) { LocalDate today = LocalDate.now(); // 上周第一天 (周一) LocalDate lastWeekStart = today.minusWeeks(1).with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY)); // 上周最后一天 (周日) LocalDate lastWeekEnd = today.minusWeeks(1).with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY)); System.out.println("Last week start: " + lastWeekStart); System.out.println("Last week end: " + lastWeekEnd); } } ``` 这种方法不仅更加清晰易懂,而且完全避免了传统 `Calendar` 方法可能带来的错误风险。 --- #### 3. **最佳实践总结** 当涉及到星期天数的具体运算时,应尽可能采用以下策略: - 对于简单的日期表示或者仅需日期部分而无需时间的部分,可以选择 `LocalDate`[^1]。 - 如果还需要记录具体的时间戳,则应当选用 `LocalDateTime`。 - 避免直接依赖已过时的 `Date` 或者 `Calendar` 接口,除非项目环境严格限定无法升级至 JDK 8+ 版本。 此外需要注意的是,所有的实例对象均不可共享到多线程环境中去修改状态;因为无论是 `LocalDate` 还是其他新型数据结构都是不可变类型的设计理念产物——这从根本上解决了并发访问的安全隐患问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值