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

用Java的simpledateformat强制4位数字的年份

海新霁
2023-03-14
问题内容

我想使用带有格式“
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用于表示月份,否则您正在解析分钟!),然后检查年份是否大于某个截止日期(例如,解析出生日期时,大于1800是安全的选择,何时解析日期大于或等于当前年份的日期比较合适)。



 类似资料:
  • 问题内容: java.time中的类提供了三种方法来生成字符串来表示包括年份的值。例如,。 对于我所见的语言环境,较短的样式中的年份仅是两位数。 如何让java.time本地化却 强制年份为四位数 而不是两位? 我怀疑答案在课堂上。但是我找不到改变年份长度的任何功能。我还细读了Java 9源代码 ,但是无法充分理解该代码以找到答案。 …但是这些问题针对的是java.time类所取代的较旧的日期时间

  • 问题内容: 我正在使用Jodatime格式化日期,并使用语言环境来格式化特定于语言环境的日期。我希望将日期格式设置为“ 17/06/2013”​​(分隔符必须取决于语言环境), 几乎 可以通过以下方式实现 它给出“ 17/06/13”(2位数字的年份)。样式“ M-”表示“ 17 juin 2013”​​(法语区域设置),这也不是我想要的。 当然,我可以使用“ dd / MM / yyyy”之类的

  • 我想强制总是有2个小数来输入会计数据。 我已经用JavaScript实现了这一点

  • 问题内容: 如何不使用任何子字符串算法或任何第三方库而仅显示当年的最后两位数字? 我尝试了以下方法,它给出了四位数的年份。我想知道是否有任何日期格式选项可用于以两位数格式获取当前年份。 问题答案: 您可以根据需要使用来格式化日期。 编辑: 根据需要/要求,可以使用我建议的方法或 Robin 建议的方法。理想情况下,当使用Date处理大量操作时,最好使用一种方法。

  • 问题内容: 当我使用json.net将小数写到json时,我变得很烦人。有时是1 dp,其他时候是2。 显然,我知道将小数输出到具有一定数量的小数(例如this)的字符串的解决方案,但是我猜想如果没有编写自定义的序列化程序,就无法使用json.net进行控制。 我也知道要强制使用 最大 小数位数,这个问题与强制执行最小小数位数有关。 前两个测试表明发生了什么,它保持声明或计算中的原始小数位数。 我

  • 问题内容: 我在代码中使用了SimpleDateFormat(“ dd-MMM-YYYY”),输出错误。 上面的代码给出了: 实际日期:星期二十二月30 13:51:06 IST 2014格式化后:30-Dec-2015 上面的代码是打印日期,年份提前一年。并且此问题仅可在2014年12月28日至31日之间复制。 提前致谢。-阿杰 问题答案: 您正在使用,这是“ ISO-8601周年”。几乎应 始