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

时间:2023-03-02
本文介绍了在 java 的 simpledateformat 中强制 4 位数年份的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I want to validate and parse dates using a simpleDateFormat with the format "yyyymmdd" This also allows 100624, which is parsed to the year 10 (54 years after Julius Ceasar died). The dates will also be something like 1970, so I don't want to settle with SimpleDateFornat("yymmdd").

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

I'm wondering is there a way to force a four digit year format using the SimpleDateFormat? I'm close to do a regexp test upfront but maybe there is a smart way to use the (Simple)DateFormat()?

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

As requested the code, things are getting more complicate and my research was half. The Format used was yyyy-MM-dd to start with (it came from a variable, which had a wrong javadoc). However as indicated in an answer below yyyyMMdd does force a four year digit. So my question is changed to How to force a four digit year for the "yyyy-MM-dd" format. And why does "yyyyMMdd" behave different?

    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

Which prints 0040-12-14

推荐答案

直接使用yyyyMMdd(注意:大写M表示月份,否则你正在解析分钟!),然后检查年份是否大于某个截止日期(例如,当解析出生日期时,大于 1800 是一个安全的选择,当解析大于或等于当前年份的即将到来的日期时会很好).

Simply use yyyyMMdd (note: upper case M is used to indicate month, otherwise you're parsing minutes!) and then check if the year is greater some cutoff date (for example, when parsing birth dates, greater 1800 is a safe bet, when parsing dates for upcomming dates greater than or equal the current year would be good).

这篇关于在 java 的 simpledateformat 中强制 4 位数年份的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:从java中的字符串解析带有正/负前缀的数字 下一篇:DateTimeFormatter 自动更正无效(语法上可能)的日历日期

相关文章