java中的日期模式分析

时间:2015-03-03 12:57:09

标签: java regex date simpledateformat

我的要求是分析给定日期并找出其模式如下:

  

21/12/2014 - dd / mm / yyyy

     

21.12.14 - dd.mm.yy

     

21-6-14 - dd-m-yy

     

2014/12/15 - yyyy / mm / dd

等等。

因此,我的方法和原因是什么:

  
      
  1. 使用正则表达式验证日期,然后打印模式。
  2.         

         
        
    1. 使用SimpleDateFormat解析日期,然后打印模式。
    2.   

欢迎任何其他方法。

1 个答案:

答案 0 :(得分: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. 这一年,当结束时,总是四位或两位数。