首页 > 解决方案 > Java SimpleDateFormat 显示的日期不正确

问题描述

private static final String LONG_DATE_PATTERN = "YYYY-MMM-dd hh:mm:ss a";
private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);

    public static String formatWith12HourClock(Date date) {
        return longDateFormat.format(date);
    }

这将为日期 2018-Dec-31 生成 2019-Dec-31 12:00:00 AM,这是不正确的。

标签: javadatedatetimesimpledateformat

解决方案


正如在其他答案中所说,您应该使用yyyy而不是YYYY. 如果您正在使用 java8 或更高版本,您还可以使用DateTimeFormatterBuilder来避免原始模式,例如:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendValue(ChronoField.YEAR_OF_ERA, 4, 19, SignStyle.EXCEEDS_PAD)
        .appendLiteral("-")
        .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.SHORT)
        .appendLiteral("-")
        .appendValue(ChronoField.DAY_OF_MONTH, 2)
        .appendLiteral(" ")
        .appendValue(ChronoField.CLOCK_HOUR_OF_AMPM, 2)
        .appendLiteral(":")
        .appendValue(ChronoField.MINUTE_OF_HOUR, 2)
        .appendLiteral(":")
        .appendValue(ChronoField.SECOND_OF_MINUTE, 2)
        .appendLiteral(" ")
        .appendText(ChronoField.AMPM_OF_DAY, TextStyle.SHORT)
        .toFormatter();

LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(formatter.format(localDateTime));

推荐阅读