1 | package org.openstreetmap.josm.tools;
|
---|
2 |
|
---|
3 | import java.text.ParseException;
|
---|
4 | import java.text.SimpleDateFormat;
|
---|
5 | import java.util.Date;
|
---|
6 | import java.util.regex.Matcher;
|
---|
7 | import java.util.regex.Pattern;
|
---|
8 |
|
---|
9 | /**
|
---|
10 | * Tries to parse a date as good as it can.
|
---|
11 | *
|
---|
12 | * @author Immanuel.Scholz
|
---|
13 | */
|
---|
14 | public class DateParser {
|
---|
15 |
|
---|
16 | private static final String[] formats = {
|
---|
17 | "yyyy-MM-dd'T'HH:mm:ss'Z'",
|
---|
18 | "yyyy-MM-dd'T'HH:mm:ssZ",
|
---|
19 | "yyyy-MM-dd'T'HH:mm:ss",
|
---|
20 | "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
|
---|
21 | "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
|
---|
22 | "yyyy-MM-dd HH:mm:ss",
|
---|
23 | "MM/dd/yyyy HH:mm:ss",
|
---|
24 | "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
|
---|
25 | "MM/dd/yyyy'T'HH:mm:ss.SSSZ",
|
---|
26 | "MM/dd/yyyy'T'HH:mm:ss.SSS",
|
---|
27 | "MM/dd/yyyy'T'HH:mm:ssZ",
|
---|
28 | "MM/dd/yyyy'T'HH:mm:ss",
|
---|
29 | "yyyy:MM:dd HH:mm:ss", // unfcklvble, but I have seen this...
|
---|
30 | };
|
---|
31 |
|
---|
32 | public static Date parse(String d) throws ParseException {
|
---|
33 | // first try to fix ruby's broken xmlschema - format
|
---|
34 | Matcher m = Pattern.compile("(....-..-..T..:..:..[+-]..):(..)").matcher(d);
|
---|
35 | if (m.matches())
|
---|
36 | d = m.group(1) + m.group(2);
|
---|
37 |
|
---|
38 | for (String parse : formats) {
|
---|
39 | SimpleDateFormat sdf = new SimpleDateFormat(parse);
|
---|
40 | try {return sdf.parse(d);} catch (ParseException pe) {}
|
---|
41 | }
|
---|
42 | throw new ParseException("", 0);
|
---|
43 | }
|
---|
44 | }
|
---|