【问题标题】:SimpleDateFormat ValidationSimpleDateFormat 验证
【发布时间】:2013-07-21 07:30:03
【问题描述】:

我正在尝试使用简单日期格式验证日期,以便将其放入 MySQL 数据库中

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
sdf.setLenient(false);
java.util.Date testDate = sdf.parse("2011-13-05");
System.out.println(testDate);

提供输出, 2011 年 1 月 5 日星期三 00:13:00 GMT-06:00 谁能解释为什么将日期转换为时间,从而防止检测到无效的第 13 个月? java.util.date 是否有日期对象而不是日期时间对象? 我的代码的修改版本将非常有帮助。

【问题讨论】:

    标签: java mysql date simpledateformat


    【解决方案1】:

    您应该使用 MM 作为月份。 mm 代表minute in hour

    new SimpleDateFormat("yyyy-MM-dd");
    

    【讨论】:

    • 非常感谢。作为初学者不知道。
    • @XperiazX。不客气:) 但是您应该考虑按照 JonSkeet 在他的回答中的建议转移到 Joda Time。那是更好的日期/时间 API。你得到你想要的一切。
    【解决方案2】:

    谁能解释为什么将日期转换为时间,从而防止检测到无效的第 13 个月?

    因为您的模式指定 分钟 而不是 。你想要MM 而不是mm。每当您的 SimpleDateFormat 行为不符合您的预期时,您应该根据文档检查您的模式。

    java.util.date 有日期对象而不是日期时间对象吗?

    不,但Joda Time 可以(LocalDate)。 Joda Time 是一个非常更简洁的日期/时间 API,它有助于区分不同的概念:

    • Instant(只是一个时间点 - 没有时区或日历)
    • DateTime(带有时区和日历的日期和时间)
    • LocalDate(只是特定日历中的日期)
    • LocalTime(只是特定日历中的一天中的某个时间)
    • LocalDateTime(特定日历中的日期和时间)

    在 API 方面有些粗糙,但总体上比java.util.Datejava.util.Calendar 要好得多。 Java 8 中将提供的JSR-310 API 与两者都不同,但主要由 Joda Time 的一位领导者开发,因此存在很多概念重叠。

    【讨论】:

    • 感谢您的回答。但我正在做一个简单的项目,并考虑了文本验证和简单的 SQL 插入。不想太复杂。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2014-07-10
    • 2011-09-18
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2020-04-23
    • 2022-01-20
    相关资源
    最近更新 更多