這個問題聽起來可能與 Stackoverflow 上提出的大多數其他問題相似,但我無法弄清楚我的問題。我想將字串值決議為日期。
字串日期時間 = "2020 年 10 月 23 日 02:44:58 1000"
這個問題的解決方法是:
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("d MMM yyyy HH:mm[:ss] Z");
DateTimeFormatter dtf = builder.toFormatter();
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTime, dtf);
Instant instant = zonedDateTime.toInstant();
Date finalDate = Date.from(instant);
如果我想用時區決議日期,而不是像String dateTime = "23 Oct 2020 02:44:58 AEST"那么我需要更改builder.appendPattern("d MMM yyyy HH:mm[:ss] Z"); 從大寫 Z 到這里提到的小 z 。
這里的問題是如何讓我的決議器足夠靈活以處理時區或偏移值?
筆記。我使用 [ss] 作為秒的欄位是可選的。根據檔案,使用 VV 類似于 z 而“V”對我不起作用。
uj5u.com熱心網友回復:
您可以將它們作為可選部分添加到格式化程式中,就像您對秒部分所做的一樣:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("d MMM yyyy HH:mm[:ss] [Z][z]")
.toFormatter(Locale.ROOT);
Online demo
[并且]表示可選部分:如果可以通過括號內的模式成功決議相應的文本,則消費相應的文本,否則不消費任何文本并跳過其中的模式。
uj5u.com熱心網友回復:
您可以嘗試使用 try-catch 塊
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("d MMM yyyy HH:mm[:ss] Z");
DateTimeFormatter dtf = builder.toFormatter();
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("d MMM yyyy HH:mm[:ss] z");
DateTimeFormatter dtf = builder.toFormatter();
ZonedDateTime zonedDateTime;
try {
zonedDateTime = ZonedDateTime.parse(dateTime, dtf1);
} catch (DateTimeParseException e) {
zonedDateTime = ZonedDateTime.parse(dateTime, dtf2);
}
Instant instant = zonedDateTime.toInstant();
Date finalDate = Date.from(instant);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322050.html
標籤:爪哇 约会时间 java-8 分区日期时间 日期时间格式化程序
上一篇:未給出預期結果的類的方法
下一篇:從日期4.5.6中提取日、月和年
