以不同格式解析日期的推荐方法是什么?

时间:2013-08-22 10:33:12

标签: java regex string date split

我正在进行Java分配,以创建一个接受多种格式的日期的程序:

日期必须为DD,月份可以是MM(数字)或MMM(前3个字母),年份可以是YY或{{1} }。分隔符可能是斜线,点或破折号。

要接受的输入示例:

  • YYYY
  • 1/May/2001
  • 23.8.9

我的问题是String接受用户输入。所以我需要在分隔符之间分隔信息。

我应该怎么做才能做到这一点?建议我使用7-01-01包吗?

5 个答案:

答案 0 :(得分:2)

您可以创建不同的格式字符串,并使用SimpleDateFormat捕获ParseException进行解析。这不是一个优雅的解决方案,但它应该有效。

你可以做这样的事情,根据你的需要调整:

String[] formatStrings = {"dd/MM/yyyy", "dd.mm.yy", "dd-mm-yyy"};

//...

Date tryParse(String dateString)
{
    for (String formatString : formatStrings)
    {
        try
        {
            return new SimpleDateFormat(formatString).parse(dateString);
        }
        catch (ParseException e) {
          \\you can log the error
         }
    }

    return null;
}

答案 1 :(得分:0)

你自己说伙计了。使用spit来分割您的邮件。您应该做的第一件事是检查他们使用的分隔符类型:

if(input.contains("/")
{
     delim = "/";
}
else if(input.contains(".")
{
     delim = ".";
     // you get the idea.
}

然后,您只需使用split方法将字符串分隔为基于该分隔符的单独字符串:

String[] tokens = input.split(delim);

// Value in tokens for input "22/12/1985"

     [0] = "22"
     [1] = "12"
     [2] = "1985"

// Value in tokens for input "009/1990"

     [0] = "009"
     [1] = "1990"

编辑以包含一些正则表达式信息

您可以使用一些简单的正则表达式拆分涉及查找分隔符的部分。

String pattern = "[/|-|\.| ]";
String[] values = input.split(pattern);

这将搜索"/""-""."" "

答案 2 :(得分:0)

使用类SimpleDateFormat的掩码来获得你想要的东西:

示例:

SimpleDateFormat format = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

答案 3 :(得分:0)

你的作业主要是检测格式,一旦你知道它是什么就解析它。正则表达式确实有帮助,但本身还不够。

我的建议是首先通过调用String#indexOf来检测使用哪个分隔符,然后按该分隔符分割,然后分析哪个部分意味着什么。在这一步中,正则表达式可能会派上用场。

修改

事实上, ifology 无需检测分隔符:您可以在[\-./]上拆分,一次覆盖任何分隔符。

答案 4 :(得分:0)

如果您希望将日,月和年作为一个值使用拆分!

String date = "10/08/2003";
date.split("/");

你得到一个包含值的数组!

如果要检查字符串是否为有效日期,请使用正则表达式。最好是检查字符串是否有效!使用本教程here了解如何使用正则表达式检查日期。

使用contains检查您必须使用的分隔符。因为有正则表达式的有效日期只能在正确的位置。

date.contains("/")

如果日期包含“/”,则此方法返回true。你应该在if条件下使用它!