LocalDate beginDate = LocalDate.now()
.with(ChronoField.DAY_OF_WEEK, 1)
.atStartOfDay()
.minusDays(8)
.toLocalDate();
我使用上面的代码行获得前一周的开始日期。然而,我想添加HH:MM:SS格式。我试过不同的方法来得到它。尝试使用LocalDateTime而不是Localdate。但是找不到LocalDateTime的atStartOfDay()
方法。帮我添加HH:MM:SS到beginDate
变量
br
LocalDate // Represents a date only, without a time of day, without a time zone or offset.
.now( ZoneId.of( "Asia/Amman" ) ) // Returns a `LocalDate`.
.minusDays( 8 ) // Returns another `LocalDate` object.
.atStartOfDay( ZoneId.of( "Asia/Amman" ) ) // Returns a `ZonedDateTime`.
.toString() // Returns a `String` object, with text in standard ISO 8601 format wisely extended to append the name of time zone in brackets.
查看此代码运行在Ideone.com。注意,在那个区域的那个日期,一天从01:00开始,而不是00:00。
2022 - 02年- 22 - t01:00 + 03:00(亚洲/安曼)
不涉及"格式">
日期-时间对象没有" format "。文本有格式。日期时间对象不是文本。
LocalDate
没有时间
你说:
add HH:MM:SS format to [a
LocalDate
object]
LocalDate
只表示日期,没有时间,没有时区或偏移量。
ZonedDateTime
显然你想要的是你所在地区8天前一天的第一刻。
首先,指定您想要/期望的时区。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
或者使用JVM当前的默认时区。
ZoneId z = ZoneId.systemDefault() ;
捕获当前日期,如在该区域中所见。
LocalDate today = LocalDate.now( z ) ;
回到八天前。
LocalDate eightDaysAgo = today.minusDays( 8 ) ;
如果你打算回到上一个星期一,使用TemporalAdjuster
。
LocalDate previousMonday = today.with( TemporalAdjusters.previous( DayOfWeek.MONDAY ) ) ;
抓住当天的第一个时刻。通过你的时区
ZonedDateTime zdt = eightDaysAgo.atStartOfDay( z ) ;
一天中的时间可以为00:00:00,但不一定。
所有这些已经在Stack Overflow上讨论过很多次了。
您需要的是一个LocalDateTime,它是一个带有时间组件(包括时区)的LocalDate。
LocalDate就像它在罐头上说的那样,它给你一个日期,而不是日期和时间。
LocalDateTime
.of(LocalDate.now().with(ChronoField.DAY_OF_WEEK, 1), LocalTime.MIDNIGHT)
.minusWeeks(1)
显示上周午夜(当地时间)的开始时间。
@DateTimeFormat("HH:MM:SS")
@JsonFormat("HH:MM:SS")