当前位置: 首页 > 面试题库 >

使用新的日期时间API格式化日期

胡向阳
2023-03-14
问题内容

我正在使用新的日期时间API,但是在运行时:

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类的源代码时,我看到:

  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);
    }

如文档中所述:

此方法将根据类文档中描述的简单字母和符号模式创建格式化程序。

并且所有这些字母都已定义。

那么为什么DateTimeFormatter.ofPattern不允许我们使用一些图案字母呢?


问题答案:

LocalDate仅代表一个日期,而不代表DateTime。因此,在格式化a时,“
HH:mm:ss”毫无意义LocalDateLocalDateTime假设您要代表日期和时间,请改用a 。



 类似资料:
  • 我正在玩新的日期时间API,但在运行时: 它抛出: 在查看LocalDate类的源代码时,我看到: 正如文件中所述: 该方法将根据类文档中描述的字母和符号的简单模式创建格式化程序。 所有这些字母都有定义。 那么为什么选择DateTimeFormatter呢。ofPattern不允许我们使用一些模式字母?

  • 问题内容: 我有一个类似的日期/时间字符串,但我想将其转换为,我该怎么做? 我正在使用以下代码,但会引发异常。 问题答案: 您可以执行简单的字符串操作并创建js日期对象。请参见下面的函数,该函数接受// yyyy-mm-dd hh:mm:ss格式的日期

  • 我有一个以下格式的字符串: 我想利用这个时刻。js以这种格式获取它,用于显示。 我试着用这个方法, 哪些错误并表示没有称为“替换”的方法?我是不是走错了路? 我还应该提到,我正在使用一个预打包版本的矩。js,为Meteor打包。js 堆栈跟踪:

  • 主要内容:日期格式化符号,Python处理,Pandas处理当进行数据分析时,我们会遇到很多带有日期、时间格式的数据集,在处理这些数据集时,可能会遇到日期格式不统一的问题,此时就需要对日期时间做统一的格式化处理。比如“Wednesday, June 6, 2020”可以写成“6/6/20”,或者写成“06-06-2020。 日期格式化符号 在对时间进行格式化处理时,它们都有固定的表示格式,比如小时的格式化符号为 ,分钟简写为 ,秒简写为 。下表对常用的日期

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y