我可以使用
获取当前日期Instant.now()
我希望得到18-<current month>-<current year>
我赞同Basil Bourque的回答。然而,如果您正在寻找一个Instant
对象,您可以通过调整UTC当前的OffsetDateTime
到每月的第18天来获得它,如下所示:
public class Main {
public static void main(String[] args) {
Instant thisInstantOn18th = OffsetDateTime.now(ZoneOffset.UTC)
.with(ChronoField.DAY_OF_MONTH, 18)
.toInstant();
System.out.println(thisInstantOn18th);
}
}
:
2022-12-18T19:19:20.128313Z
从Trail: Date Time了解更多关于现代Date-Time API的信息.
br
YearMonth // Represents a year and month only, no day of month.
.now(
ZoneId.of( "America/Edmonton" ) // Returns a `ZoneId` object.
)
.atDay( 18 ) // Returns a `LocalDate` object.
.format(
DateTimeFormatter
.ofPattern( "dd-MM-uuuu" )
) // Returns a `String` object.
<标题>详细信息正如Ole V.V.的注释所解释的那样,您使用了错误的类。这里不需要Instant
- 表示日期,使用
LocalDate
。 - 使用
YearMonth
表示年份和月份。
获取当前年/月。
这样做需要一个时区。对于任何给定的时刻,全球各地的日期都因时区而异。因此,当前月份在日本东京可能同时是"下个月",而在俄亥俄州托莱多可能同时是"上个月"。
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
YearMonth ym = YearMonth.now( z ) ;
如果您希望当前月份与UTC的小时-分钟-秒偏移为0,请使用ZoneOffset.UTC
常量。
YearMonth ym = YearMonth.now( ZoneOffset.UTC ) ;
应用一个月中的某一天来获取日期。
LocalDate ld = ym.atDay( 18 ) ;
生成标准ISO 8601格式的文本。
String output = ld.toString() ;
生成特定格式的文本。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = ld.format( f ) ;
标题>