【问题标题】:validating a date using dateformat [duplicate]使用 dateformat 验证日期 [重复]
【发布时间】:2012-10-14 23:31:14
【问题描述】:

我正在尝试验证实际上是字符串的日期,并尝试以yyyy/MM/dd 格式打印它。 这是代码。

String s="2012/12/0390990";
SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(ft.format(ft.parse(s))); 

输出为3083/05/30。我也想要验证。不知道如何继续。

【问题讨论】:

    标签: java date-format


    【解决方案1】:

    默认情况下是宽松的。解析前需要设置non-lenient

    ft.setLenient(false);
    

    当提供的日期和/或月份与年份相比无效时,这将导致ParseException。请注意,这并不能验证年份本身,因为基本上任何年份都是有效的。根据具体的功能要求,您可能需要对年份进行额外检查,例如在/ 上拆分字符串,然后检查第一部分的长度是否为4。

    【讨论】:

    • 但是为什么宽松的解析会导致日期似乎与输入不同...
    • @Miserable: 390990 天大约是 1071 年。从字面上看,它已被解释并滚动到月/年中,以适应该月可以容纳的天数。你最终会再过 1071 年。
    【解决方案2】:

    您最好使用正则表达式来验证输入,
    例如看这个答案:
    https://stackoverflow.com/a/2149692/1448704

    塞巴斯蒂安

    【讨论】:

    • DateFormat 比正则表达式更适合此任务。
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多