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

Java 以不同格式解析日期的推荐方法是什么?,java,regex,string,date,split,Java,Regex,String,Date,Split,我正在进行一项Java任务,以创建一个接受多种格式日期的程序: 日期必须是日,月份可以是毫米(数字)或毫米(前3个字母),年份可以是年。分隔符可以是斜线、点或破折号 要接受的输入示例: 2001年5月1日 23.8.9 7-01-01 我的问题是用户输入被字符串接受。所以我需要在分隔符之间分隔信息 我应该用什么来做这个?建议我使用java.util.regex包?你自己说的,伙计。使用spit分割您的信息。您应该做的第一件事是检查它们使用的分隔符类型: if(input.contains("

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

日期必须是日,月份可以是毫米(数字)或毫米(前3个字母),年份可以是年。分隔符可以是斜线、点或破折号

要接受的输入示例:

  • 2001年5月1日
  • 23.8.9
  • 7-01-01
我的问题是用户输入被字符串接受。所以我需要在分隔符之间分隔信息


我应该用什么来做这个?建议我使用
java.util.regex
包?

你自己说的,伙计。使用
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);

这将搜索
“/”
“-”

使用SimpleDataFormat类的掩码来获取所需内容:

例如:

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

你的任务主要是检测格式,而不是在你知道它是哪种格式后解析它。正则表达式肯定会有所帮助,但本身还不够

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

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

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

String date = "10/08/2003";
date.split("/");
您将得到一个包含值的数组

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

使用“包含”检查必须使用的分隔符。因为使用regex的有效日期只能在正确的位置使用它

date.contains("/")

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

您可以创建不同格式的字符串,并使用
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;
}

查看
String#split
在标记
Java
时,请不要在标题中写入
Java
。@user2706930,您的问题是非常开放的。对于像
01-02-03
这样的输入,无法确定哪一个是月、日或年。它可能是mm-DD-YY或YY-mm-DD。用户输入中是否有任何有助于识别此信息的限制?但如果是21.8.2003和8.8.2003或8.08.2003,该怎么办?比其他指数更重要…@Gerret这无关紧要。使用
indexOf
测试是否存在。如果它不存在,则返回-1。只要我不知道正确的集合会导致性能问题,我就不会使用数组。并且不要返回null。返回默认值或引发异常。但是,从这些细节中,我认为这种方法是优雅的,因为它使用java。