如何在java中添加HH:MM:SS格式的LocalDate ?


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 [aLocalDateobject]

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")

最新更新