import java.text.DateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateParse {
public static void main(String[] args) throws Exception {
final String dateStr = "1997-02-14T00:00:00.0000000+05:30";
final String metaChars = "$()*+.?[\\^{|"; // Java regex meta-characters
final Pattern YMD_PATTERN = Pattern.compile(
"(\\d{4})[/\\-\\.](\\d{2})[/\\-\\.](\\d{2})" // yyyy-mm-dd
+ "T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{1,20})" // Thh:mm:ss.microsec
+ "\\+(\\d{2}):(\\d{2})" // +th:tm (timezone)
);
final Matcher matcher = YMD_PATTERN.matcher(dateStr);
if (matcher.matches()) {
final int TOKEN_COUNT = 9;
final String[] tokens = new String[TOKEN_COUNT];
for (int i = 0; i < TOKEN_COUNT; i++) {
tokens[i] = matcher.group(i + 1);
if (tokens[i] == null) {
throw new IllegalStateException("Invalid date string - cannot parse");
}
}
System.out.println("" + Arrays.asList(tokens));
// get time-zone
final String tzStr = "GMT+" + tokens[7] + ":" + tokens[8];
final TimeZone tz = TimeZone.getTimeZone(tzStr);
final Calendar cal = Calendar.getInstance(tz);
final int y = Integer.parseInt(tokens[0]);
final int m = Integer.parseInt(tokens[1]);
final int d = Integer.parseInt(tokens[2]);
final int hh = Integer.parseInt(tokens[3]);
final int mm = Integer.parseInt(tokens[4]);
final int ss = Integer.parseInt(tokens[5]);
final int ms = Integer.parseInt(tokens[6]);
cal.set(y, m - 1 /* month is zero-based */, d, hh, mm, ss);
final Date date = cal.getTime();
System.out.println(date);
} else {
System.out.println("Does not match");
}
}
}