使用新的日期时间 API 格式化日期 [英] Format a date using the new date time API
问题描述
我正在使用新的日期时间 API,但在运行时:
I was playing with the new date time API but when running this:
public class Test {
public static void main(String[] args){
String dateFormatted = LocalDate.now()
.format(DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(dateFormatted);
}
}
它抛出:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay
at java.time.LocalDate.get0(LocalDate.java:680)
at java.time.LocalDate.getLong(LocalDate.java:659)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
at java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2543)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182)
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745)
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719)
at java.time.LocalDate.format(LocalDate.java:1685)
at Test.main(Test.java:23)
在查看LocalDate类的源代码时,我看到:
When looking at the source code of the LocalDate class, I see:
private int get0(TemporalField field) {
switch ((ChronoField) field) {
case DAY_OF_WEEK: return getDayOfWeek().getValue();
case ALIGNED_DAY_OF_WEEK_IN_MONTH: return ((day - 1) % 7) + 1;
case ALIGNED_DAY_OF_WEEK_IN_YEAR: return ((getDayOfYear() - 1) % 7) + 1;
case DAY_OF_MONTH: return day;
case DAY_OF_YEAR: return getDayOfYear();
case EPOCH_DAY: throw new UnsupportedTemporalTypeException("Invalid field 'EpochDay' for get() method, use getLong() instead");
case ALIGNED_WEEK_OF_MONTH: return ((day - 1) / 7) + 1;
case ALIGNED_WEEK_OF_YEAR: return ((getDayOfYear() - 1) / 7) + 1;
case MONTH_OF_YEAR: return month;
case PROLEPTIC_MONTH: throw new UnsupportedTemporalTypeException("Invalid field 'ProlepticMonth' for get() method, use getLong() instead");
case YEAR_OF_ERA: return (year >= 1 ? year : 1 - year);
case YEAR: return year;
case ERA: return (year >= 1 ? 1 : 0);
}
throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
}
如文档中所述:
此方法将基于简单的模式创建格式化程序类文档中描述的字母和符号.
This method will create a formatter based on a simple pattern of letters and symbols as described in the class documentation.
所有这些字母都是定义.
那么为什么 DateTimeFormatter.ofPattern
不允许我们使用一些模式字母?
So why DateTimeFormatter.ofPattern
doesn't allow us to use some pattern letters?
推荐答案
LocalDate
仅表示日期,而不是 DateTime.所以在格式化 LocalDate
时HH:mm:ss"是没有意义的.使用 LocalDateTime
代替,假设您要同时表示日期和时间.
LocalDate
represents just a date, not a DateTime. So "HH:mm:ss" make no sense when formatting a LocalDate
. Use a LocalDateTime
instead, assuming you want to represent both a date and time.
这篇关于使用新的日期时间 API 格式化日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!