提问人:Cork Kochi 提问时间:12/2/2022 最后编辑:OneCricketeerCork Kochi 更新时间:12/2/2022 访问量:147
如何使用 java Instant 将 18 作为当月的一天
How can I add 18 as day to current month using java Instant
问:
我可以使用以下方式获取当前日期
Instant.now()
我想要得到18-<current month>-<current year>
答:
1赞
Basil Bourque
12/2/2022
#1
TL的;博士
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 ) ;
评论
1赞
Michael
12/2/2022
通常的策略是在输入完;)后提交
0赞
Basil Bourque
12/2/2022
@Michael 在 iPad 上用拇指在 Stack Overflow 的片状文本编辑器中打字时不会。早存钱,经常存钱。
3赞
Arvind Kumar Avinash
12/2/2022
#2
我赞同Basil Bourque的回答。但是,如果您要查找对象,可以通过将 UTC 的电流调整到每月的 18 日来获取它,如下所示:Instant
OffsetDateTime
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 了解有关新式日期时间 API 的更多信息。
评论
0赞
Anonymous
12/2/2022
这是有可能的。我们不知道 OP 是否想要 UTC )我可能认为这不太可能),我们也不知道他们是否想要当天 UTC 的当前时间(正如您给他们的那样)。也许他们这样做了。
1赞
Arvind Kumar Avinash
12/2/2022
@OleV.V.这是有道理的。但是,我的答案是基于这样的假设,即 OP 希望将 18 日视为输出中的月中的某一天,而保持其他单位不变。这就是我选择UTC的原因。
评论
YearMonth.now(ZoneId.systemDefault()).atDay(18)
.Instant
Instant
instant.atZone(ZoneOffset.UTC).withDayOfMonth(18).toInstant()