ZonedDateTime 来自 yyyy-mm-dd 中的日期字符串
ZonedDateTime from date string in yyyy-mm-dd
正在尝试从日期字符串(例如“2020-08-24”)解析 ZonedDateTime。
使用 TemporalAccessor 和 DateTimeFormatter.ISO_OFFSET_DATE 进行解析后,我得到了 java.time.format.DateTimeParseException。我使用了错误的格式化程序吗?
甚至尝试在日期字符串的末尾添加 'Z' 以使其被理解为 UTC
private ZonedDateTime getZonedDateTime(String dateString) {
TemporalAccessor parsed = null;
dateString = dateString + 'Z';
try {
parsed = DateTimeFormatter.ISO_OFFSET_DATE.parse(dateString);
} catch (Exception e) {
log.error("Unable to parse date {} using formatter DateTimeFormatter.ISO_INSTANT", dateString);
}
return ZonedDateTime.from(parsed);
}
如评论部分中链接的 [=18th=] 所述:
The problem is that ZonedDateTime
needs all the date and time fields to be built (year, month, day, hour, minute, second, nanosecond), but the formatter ISO_OFFSET_DATE produces a string without the time part.
及相关解决方案
One alternative to parse it is to use a DateTimeFormatterBuilder
and define default values for the time fields
offset in ISO_OFFSET_DATE 表示时区指定为相对于 UTC
的相对偏移量
所以在您输入的末尾应该有类似“+01:00”的内容。
使用LocalDate#atStartOfDay
按如下操作:
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Define a DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd");
// Given date string
String strDate = "2020-08-24";
// Parse the given date string to ZonedDateTime
ZonedDateTime zdt = LocalDate.parse(strDate, dtf).atStartOfDay(ZoneOffset.UTC);
System.out.println(zdt);
}
}
输出:
2020-08-24T00:00Z
正在尝试从日期字符串(例如“2020-08-24”)解析 ZonedDateTime。
使用 TemporalAccessor 和 DateTimeFormatter.ISO_OFFSET_DATE 进行解析后,我得到了 java.time.format.DateTimeParseException。我使用了错误的格式化程序吗?
甚至尝试在日期字符串的末尾添加 'Z' 以使其被理解为 UTC
private ZonedDateTime getZonedDateTime(String dateString) {
TemporalAccessor parsed = null;
dateString = dateString + 'Z';
try {
parsed = DateTimeFormatter.ISO_OFFSET_DATE.parse(dateString);
} catch (Exception e) {
log.error("Unable to parse date {} using formatter DateTimeFormatter.ISO_INSTANT", dateString);
}
return ZonedDateTime.from(parsed);
}
如评论部分中链接的 [=18th=] 所述:
The problem is that
ZonedDateTime
needs all the date and time fields to be built (year, month, day, hour, minute, second, nanosecond), but the formatter ISO_OFFSET_DATE produces a string without the time part.
及相关解决方案
One alternative to parse it is to use a
DateTimeFormatterBuilder
and define default values for the time fields
offset in ISO_OFFSET_DATE 表示时区指定为相对于 UTC
的相对偏移量所以在您输入的末尾应该有类似“+01:00”的内容。
使用LocalDate#atStartOfDay
按如下操作:
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Define a DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd");
// Given date string
String strDate = "2020-08-24";
// Parse the given date string to ZonedDateTime
ZonedDateTime zdt = LocalDate.parse(strDate, dtf).atStartOfDay(ZoneOffset.UTC);
System.out.println(zdt);
}
}
输出:
2020-08-24T00:00Z