获取月份最后日期
Get the month last date
我有一个 LocalDateTime 对象,我想获取该月的最后一个日期。因此,如果 localDateTime 指向今天的 10 月 29 日。我想将其转换为 10 月 31 日
有没有简单易行的方法?
我的想法:
一种方法是获取月份,然后进行 switch 语句。但那将是漫长而乏味的方法。不确定是否有内置方法
可以执行相同的操作
LocalDate date = LocalDate.now();
YearMonth month = YearMonth.from(date);
LocalDate end = month.atEndOfMonth();
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String args[]) {
LocalDateTime a = LocalDateTime.of(2021, 10, 29, 0, 0);
LocalDateTime b = a.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(a);
System.out.println(b);
}
}
你问过:
How do I add the endTime of day to the localDateTime. I see an option called LocalTime.MAX but it adds trailing .99999
如果您正在跟踪时间轴上的时刻、特定点,请不要使用 LocalDateTime
。 class 缺少时区上下文或与 UTC 的偏移量。暂时使用 Instant
、OffsetDateTime
或 ZonedDateTime
.
用 YearMonth
表示整个月。
你不应该试图确定这个月的最后一刻。最后一刻是无限可分的。通常,定义时间跨度的最佳方法是半开放法而不是全封闭法。在 Half-Open 中,开始是 inclusive 而结束是 exclusive.
所以一天从一天的第一刻开始,一直到但不包括 下一个 天的第一刻。一个月从该月第一天的第一刻开始,一直到但不包括 下一个 月的第一刻。
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
YearMonth currentMonth = YearMonth.now( z ) ;
YearMonth followingMonth = currentMonth.plusMonths( 1 ) ;
ZonedDateTime start = currentMonth.atDay( 1 ).atStartOfDay( z ) ;
ZonedDateTime end = followingMonth.atDay( 1 ).atStartOfDay( z ) ;
为了表示那个时间跨度,添加 ThreeTen-Extra library to your project. Use the Interval
class 及其方便的比较方法,例如 abuts
、overlaps
和 contains
。
org.threeten.extra.Interval interval = Interval.of( start.toInstant() , end.toInstant() ) ;
我有一个 LocalDateTime 对象,我想获取该月的最后一个日期。因此,如果 localDateTime 指向今天的 10 月 29 日。我想将其转换为 10 月 31 日
有没有简单易行的方法?
我的想法:
一种方法是获取月份,然后进行 switch 语句。但那将是漫长而乏味的方法。不确定是否有内置方法
可以执行相同的操作
LocalDate date = LocalDate.now();
YearMonth month = YearMonth.from(date);
LocalDate end = month.atEndOfMonth();
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String args[]) {
LocalDateTime a = LocalDateTime.of(2021, 10, 29, 0, 0);
LocalDateTime b = a.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(a);
System.out.println(b);
}
}
你问过:
How do I add the endTime of day to the localDateTime. I see an option called LocalTime.MAX but it adds trailing .99999
如果您正在跟踪时间轴上的时刻、特定点,请不要使用 LocalDateTime
。 class 缺少时区上下文或与 UTC 的偏移量。暂时使用 Instant
、OffsetDateTime
或 ZonedDateTime
.
用 YearMonth
表示整个月。
你不应该试图确定这个月的最后一刻。最后一刻是无限可分的。通常,定义时间跨度的最佳方法是半开放法而不是全封闭法。在 Half-Open 中,开始是 inclusive 而结束是 exclusive.
所以一天从一天的第一刻开始,一直到但不包括 下一个 天的第一刻。一个月从该月第一天的第一刻开始,一直到但不包括 下一个 月的第一刻。
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
YearMonth currentMonth = YearMonth.now( z ) ;
YearMonth followingMonth = currentMonth.plusMonths( 1 ) ;
ZonedDateTime start = currentMonth.atDay( 1 ).atStartOfDay( z ) ;
ZonedDateTime end = followingMonth.atDay( 1 ).atStartOfDay( z ) ;
为了表示那个时间跨度,添加 ThreeTen-Extra library to your project. Use the Interval
class 及其方便的比较方法,例如 abuts
、overlaps
和 contains
。
org.threeten.extra.Interval interval = Interval.of( start.toInstant() , end.toInstant() ) ;