java - 在 java 的 simpledateformat 中强制 4 位数年份

我想使用格式为“yyyymmdd”的 simpleDateFormat 验证和解析日期 这也允许 100624,它被解析为 10 年(朱利叶斯·凯撒去世 54 年后)。日期也会是 1970 年,所以我不想与 SimpleDateFornat("yymmdd") 达成一致。

我想知道有没有办法使用 SimpleDateFormat 强制使用四位数的年份格式?我即将提前进行正则表达式测试,但也许有一种聪明的方法可以使用 (Simple)DateFormat()?

根据要求的代码,事情变得越来越复杂,我的研究只完成了一半。使用的格式是 yyyy-MM-dd 开始(它来自一个变量,它有一个错误的 javadoc)。但是,正如下面的答案所示 yyyyMMdd 确实强制使用四年数字。所以我的问题变成了如何为“yyyy-MM-dd”格式强制一个四位数的年份。为什么“yyyyMMdd”表现不同?

    public void testMaturity() {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        sdf.setLenient(false);
        System.out.println(" " + sdf.format(sdf.parse("40-12-14")));
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd");
        sdf.setLenient(false);
        System.out.println(" " + sdf2.format(sdf2.parse("401214")));
        fail();
    } catch (ParseException pe) {
        assertTrue(true);
    }

打印 0040-12-14

最佳答案

只需使用 yyyyMMdd (注意:大写 M 用于表示月份,否则 you're parsing minutes !)然后检查年份是否大于某个截止日期(例如,在解析出生日期时, 大于 1800 是一个安全的选择,当解析大于或等于当前年份的即将到来的日期时会很好)。

https://stackoverflow.com/questions/3108561/

相关文章:

formatting - Dart 中的货币格式

c# - string.Format 与 string.Join

javascript - 在 JavaScript 源代码中自动插入分号的实用程序?

excel - VBA:将文本转换为数字

java - 如何在android中格式化longs以始终显示两位数

objective-c - 格式化数字以显示逗号和/或美元符号

c# - 如何在 c# 中生成像 "1st November"这样的日期格式

excel - 如何在 Excel 单元格内填零

html - 使 HTML 输出 R 中的粗体文本 Shiny

python - 在 Python 中截断十进制值