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"); } } }