关于java中的格式日期/时间

时间:2011-09-25 06:58:23

标签: java

我有两种日期时间格式

  1. 'dd-mm-yyyy'
  2. 'dd-mm-yyyy hh:MM:ss'
  3. 在我的申请中。输入值可以是上述任何形式的字符串。

    我想将此日期值存储在数据库中。所以,首先我用SimpleDateFormatter格式化它。但是如何检查输入字符串是类型1还是类型2?

    如果输入日期时间类型采用(2)的形式,并且我使用格式化程序'dd-mm-yyyy'格式化日期时间,则返回null

    无论输入类型是什么 - 必须根据输入进行转换。简而言之,我如何检查输入日期时间格式?

3 个答案:

答案 0 :(得分:4)

  

我想将此日期值存储在数据库中。所以,首先我用SimpleDateFormatter合成它,但是如何检查输入字符串是1还是2的类型。

听起来你想解析这个值 - 你不应该把它作为字符串存储在数据库中。 (解析是从字符串转换为自然数据类型,例如Date。格式化是从值转换为字符串。)

您可以尝试使用DateFormat.parse解析值,并捕获在文本无效时抛出的异常 - 但您应该知道您的格式字符串是错误的。 “M”表示一年中的一个月,“m”表示分钟,而不是相反。你也可能想要24小时制(H),而不是12小时制(h),所以你想要:

dd-MM-yyyy

dd-MM-yyyy HH:mm:ss

最后,我强烈建议您使用Joda Time而不是内置的日期/时间类。 Joda Time是一个很多更好的API。 (例如,Joda Time中的格式化程序是线程安全的,与JRE中的格式化程序不同...)

答案 1 :(得分:1)

首先,你的数据格式搞砸了 - 你错误的方式有几分钟(mm)和几个月(MM)。即你的格式应该是:

"dd-MM-yyyy"
"dd-MM-yyyy HH:mm:ss"

接下来,您可以简单地尝试每种格式并查看哪些有效:

,而不是过于聪明
public static Date parseDate(String input) {
    String[] formats = { "dd-MM-yyyy", "dd-MM-yyyy HH:mm:ss" }; // Add more as you like

    for (String format : formats) {
        try {
            return new SimpleDateFormat(format).parse(input);
        }
        catch (ParseException e) {
            // Ignore and continue
        }
    }
    throw new IllegalArgumentException("Could not parse date from " + input);
}

答案 2 :(得分:0)

区分这两种格式有很多种可能性。一个简单的方法是检查输入字符串的长度。