【问题标题】:How to check if date format is correct如何检查日期格式是否正确
【发布时间】:2019-04-22 11:27:15
【问题描述】:

我不能写一个方法来测试,日期的格式是否正确。

我写了一个检查日期格式是否正确的方法,但它给出了错误的结果,我找不到错误。

    boolean isDateFormatCorrect(String date) {
        LocalDate ld = null;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
        ld = LocalDate.parse(date, formatter);
        String result = ld.format(formatter);
        return result.equals(date);
    }
    @ParameterizedTest
    @CsvSource({"2019-04-20", "2017-01-13"})
    void isDateFormatCorrect(String date) {
        assertThat(currencyService
                .isDateFormatCorrect(date))
                .isEqualTo(true);
    }
    @ParameterizedTest
    @CsvSource({"20-04-2019", "01-01-1999", "22/2/2012", "2012/2/12"})
    void isDateFormatNotCorrect(String date) {
        assertThat(currencyService
                .isDateFormatCorrect(date))
                .isEqualTo(false);
    }

第一个测试提供正确答案,而第二个测试提供一个例外:

java.time.format.DateTimeParseException: Text '20-04-2019' could not be parsed at index 0

我相信答案很简单,但我已经尝试修复了一个多小时,但我已经失去了想法。

【问题讨论】:

  • 嗯,你非常需要捕捉异常,伙计。
  • 我不确定您的期望,但除了解析可能产生的异常之外,您没有做任何事情。

标签: java datetime


【解决方案1】:

使用这个。

new DateTimeFormatterBuilder()
            .appendValue(ChronoField.YEAR, 4, 4, SignStyle.NEVER)
            .appendPattern("MMdd")
            .toFormatter()
            .withResolverStyle(ResolverStyle.STRICT)

只是为了让您知道异常的原因是无效的date 组件。否则它仍然是有效的。例如:04-04-04yyyy-MM-dd 被解释为 2004 年 4 月 4 日。

这是用于解析年份的DatetimeFormatter 的Javadoc。另见ResolverStyle

年份:字母数决定了使用填充的最小字段宽度。如果字母数为两个,则使用简化的两位数形式。对于打印,这会输出最右边的两位数。对于解析,这将使用 2000 的基值进行解析,从而得到 2000 到 2099 范围内的年份。如果字母数少于四个(但不是两个),则仅根据 SignStyle.NORMAL 输出负年份的符号。否则,如果超出焊盘宽度,则按照 SignStyle.EXCEEDS_PAD 输出符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2015-08-11
    • 2020-12-13
    相关资源
    最近更新 更多