有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中解析字符串中的不同日期格式

我有一个字符串,可能包含以下任何格式的日期:

2001-01-05 (yyyy-mm-dd)
2001/01/05 (yyyy/mm/dd)
01/05/2001 (dd/mm/yyyy)
01-05-2001 (dd-mm-yyyy)
2001 january 5
2001 5 january
january 5 2001
5 january 2001
january 5
5 january

我希望能够解析特定字符串并从中提取日期对象

我的做法如下:

String[] date_formats = {
                            "yyyy-MM-dd",
                            "yyyyy/MM/dd", 
                            "dd/MM/yyyyy",
                            "dd-MM-yyyy",
                            "yyyy MMM dd",
                            "yyyy dd MMM",
                            "dd MMM yyyy",
                            "dd MMM",
                            "MMM dd",
                            "dd MMM yyyy"};

String output_date = null;
for (String formatString : date_formats)
{
     try
     {    
         Date mydate = new SimpleDateFormat(formatString).parse(token);
         SimpleDateFormat outdate = new SimpleDateFormat("yyyyMMdd");
         output_date = outdate.format(mydate);
         break;
     }
     catch (ParseException e) {
         System.out.println("Next!");
     }
 }

这似乎不像预期的那样有效。特别是像2001年1月5日这样的日子。我该怎么做呢


共 (2) 个答案

  1. # 1 楼答案

    与测试“yyy-MM-dd”,然后测试“yyy/MM/dd”,然后测试“yyy.MM.dd”(在许多国家使用)等不同,您可以从

    token = token.replaceAll("-|\\.", "/");
    

    这样,所有的点和破折号都将替换为“/”,您可以减少格式和尝试的数量

  2. # 2 楼答案

    您可以使用

    String mydate = new SimpleDateFormat(formatString).format(new Date());
    

    new Date()将返回当天的日期,您可以将其更改为您想要的任何日期

    所以,如果你像这样修改代码:

    String[] date_formats = {
            "y-M-d",
            "y/M/d", 
            "d/M/y",
            "d-M-y",
            "y M d",
            "y d M",
            "d M y",
            "d M",
            "M d",
            "d M y"};
    
    for (String formatString : date_formats)
        {
            String mydate = new SimpleDateFormat(formatString).format(new Date());
            System.out.println(mydate);
        }
    

    你最终会得到这些:

    2013-10-2
    2013/10/2
    2/10/2013
    2-10-2013
    2013 10 2
    2013 2 10
    2 10 2013
    2 10
    10 2
    2 10 2013