2015-03-03 51 views
0

我的要求是分析給定日期,並找出其模式如下圖所示:日期格局分析

21/12/2014 - DD/MM/YYYY

14年12月21日 - DD .mm.yy

21-6-14 - DD-M-YY

2014年12月15日 - YYYY/MM/DD

等等。使用正則表達式

  1. 驗證日期,然後打印模式:

    那麼什麼sholud是我的方法和原因。

  • 使用的SimpleDateFormat解析日期,然後打印圖案。
  • 歡迎任何其他方法。

    +1

    在這裏,你是在殺死你的思維能力,我想。你可以想出你自己的解決方案,它真的會幫助你。你將要購買某人的想法。 – 2015-03-03 12:58:29

    +2

    那麼.. 02/04/11的格式是什麼?它可以是所有的排列......你需要一些邊界約束。 – Yuri 2015-03-03 13:01:07

    +2

    如果您有從源頭獲取信息的可能性,它們以什麼格式創建,這是啓動的最佳方式。想想所有的邊緣案例爲「01-02-03」 - > 01.Feb.2003,02.Jan.2003,03.Feb.2001,... – SubOptimal 2015-03-03 13:01:35

    回答

    0

    你可以使用這樣的事情:

    Pattern pattern = Pattern.compile("\\b(\\d+)([-./])\\d{1,2}\\2(\\d{2}(?:\\d{2})?)"); 
    
    String date = "21/12/2014"; 
    Matcher matcher = pattern.matcher(date); 
    matcher.find(); 
    
    boolean dayFirst = matcher.group(1).length() == 2; 
    boolean fourCharYear = true; 
    String separator = matcher.group(2); 
    
    String dateFormat = "1sepMMsep2".replace("sep", separator); 
    
    if(dayFirst) { 
        dateFormat = dateFormat.replace("1", "dd").replace("2", "y"); 
        fourCharYear = matcher.group(3).length() == 4; 
    } else { 
        dateFormat = dateFormat.replace("2", "dd").replace("1", "y"); 
    } 
    
    if(fourCharYear) { 
        dateFormat = dateFormat.replace("y", "yyyy"); 
    } else { 
        dateFormat = dateFormat.replace("y", "yy"); 
    } 
    
    SimpleDateFormat format = new SimpleDateFormat(dateFormat); 
    Date parse = format.parse(date); 
    

    它是基於以下假設:

    1. 第一個數字組無論是白天或一年,這一年將永遠是4個字符如果它第一。
    2. 分隔永遠是要麼-./
    3. 月份的總是會來第二
    4. 的一年,在年底的時候,永遠是四位或兩位數字。