LocalDate的使用和方法

时间不仅是人类生活的基本概念,在编程中同样重要。当然,Java 也为处理时间相关的内容提供了一些工具。我们先从时间单位中的“天”(或者说日期)开始讲起。

LocalDate 类表示一个单一日期,格式是 YYYY-MM-dd,例如 2017-11-252025-01-23。它可以用来保存任何日期:从你的生日到世界末日那天。

这个类属于 java.time 包。


创建 LocalDate 实例和获取当前日期

导入类之后,可以通过下面的代码创建一个存储当前日期的实例:

LocalDate now = LocalDate.now();

当然,也可以创建表示某年某一天的具体日期的实例。LocalDate 提供了两个静态方法 ofparse 来完成:

LocalDate date1 = LocalDate.of(2017, 11, 25); // 2017-11-25(2017年11月25日)
LocalDate date2 = LocalDate.parse("2017-11-25"); // 2017-11-25(2017年11月25日)

月份的编号是从 1 到 12,且一个月中的第一天编号为 1,非常直观。

另一个有用的方式是通过指定年份和该年中的第几天来创建日期:

LocalDate.ofYearDay(2017, 33); // 2017-02-02(2017年2月2日)

第几天是一个 int 类型的数字,范围从 1 到 365(平年)或 366(闰年)。

LocalDate.ofYearDay(2016, 365); // 2016-12-30(2016年12月30日)
LocalDate.ofYearDay(2017, 365); // 2017-12-31(2017年12月31日)

不过需要注意,闰年的第366天可以有,非闰年的第366天会抛出异常:

LocalDate.ofYearDay(2016, 366); // 2016-12-31(2016年12月31日)
LocalDate.ofYearDay(2017, 366); // 会抛异常,因为2017年不是闰年

LocalDate 的年份、月份、日期及长度信息

考虑以下 LocalDate 实例:

LocalDate date = LocalDate.of(2017, 11, 25); // 2017-11-25(2017年11月25日)

可以获取年份、月份、当月第几天、当年第几天:

int year = date.getYear();           // 2017
int month = date.getMonthValue();    // 11
int dayOfMonth = date.getDayOfMonth(); // 25
int dayOfYear = date.getDayOfYear(); // 329

还能获取该年的天数和该月的天数:

int lenOfYear = date.lengthOfYear();   // 365
int lenOfMonth = date.lengthOfMonth(); // 30

LocalDate 的算术运算方法

LocalDate 还提供了添加、减少或改变天、月、年的方法。比如创建一个日期:

LocalDate date = LocalDate.of(2017, 1, 1); // 2017-01-01(2017年1月1日)

然后用这些方法:

LocalDate tomorrow = date.plusDays(1);    // 2017-01-02(2017年1月2日)
LocalDate yesterday = date.minusDays(1);  // 2016-12-31(2016年12月31日)
LocalDate inTwoYears = date.plusYears(2); // 2019-01-01(2019年1月1日)
LocalDate in2016 = date.withYear(2016);   // 2016-01-01(2016年1月1日)

总结

如你所见,LocalDate 类提供了丰富且实用的方法来处理日期。它是不可变的(immutable),每个方法调用都会返回该类的新实例,所以请放心使用这些方法!

以下是LocalDateLocalDateTime的方法: 1. LocalDate方法: - 获取当前日期:`LocalDate.now()` - 根据年月日创建日期:`LocalDate.of(year, month, day)` - 获取年份:`localDate.getYear()` - 获取月份:`localDate.getMonthValue()` - 获取日期:`localDate.getDayOfMonth()` - 获取星期几:`localDate.getDayOfWeek()` - 获取当月最后一天:`localDate.with(TemporalAdjusters.lastDayOfMonth())` - 判断是否为闰年:`localDate.isLeapYear()` 2. LocalDateTime的方法: - 获取当前日期时间:`LocalDateTime.now()` - 根据年月日时分秒创建日期时间:`LocalDateTime.of(year, month, day, hour, minute, second)` - 获取年份:`localDateTime.getYear()` - 获取月份:`localDateTime.getMonthValue()` - 获取日期:`localDateTime.getDayOfMonth()` - 获取星期几:`localDateTime.getDayOfWeek()` - 获取小时:`localDateTime.getHour()` - 获取分钟:`localDateTime.getMinute()` - 获取秒数:`localDateTime.getSecond()` - 获取毫秒数:`localDateTime.getNano()` - 获取当月最后一天:`localDateTime.with(TemporalAdjusters.lastDayOfMonth())` - 判断是否为闰年:`localDateTime.toLocalDate().isLeapYear()` ```java // LocalDate的例子 LocalDate localDate = LocalDate.now(); System.out.println("当前日期:" + localDate); // 输出:当前日期:2021-10-20 LocalDate localDate2 = LocalDate.of(2021, 10, 1); System.out.println("年份:" + localDate2.getYear()); // 输出:年份:2021 System.out.println("月份:" + localDate2.getMonthValue()); // 输出:月份:10 System.out.println("日期:" + localDate2.getDayOfMonth()); // 输出:日期:1 System.out.println("星期几:" + localDate2.getDayOfWeek()); // 输出:星期几:FRIDAY // LocalDateTime的例子 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("当前日期时间:" + localDateTime); // 输出:当前日期时间:2021-10-20T16:08:23.123 LocalDateTime localDateTime2 = LocalDateTime.of(2021, 10, 1, 12, 30, 0); System.out.println("年份:" + localDateTime2.getYear()); // 输出:年份:2021 System.out.println("月份:" + localDateTime2.getMonthValue()); // 输出:月份:10 System.out.println("日期:" + localDateTime2.getDayOfMonth()); // 输出:日期:1 System.out.println("星期几:" + localDateTime2.getDayOfWeek()); // 输出:星期几:FRIDAY System.out.println("小时:" + localDateTime2.getHour()); // 输出:小时:12 System.out.println("分钟:" + localDateTime2.getMinute()); // 输出:分钟:30 System.out.println("秒数:" + localDateTime2.getSecond()); // 输出:秒数:0 System.out.println("毫秒数:" + localDateTime2.getNano()); // 输出:毫秒数:0 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值