annotate backend/src/main/java/org/dive4elements/river/backend/utils/DateGuesser.java @ 9055:df5c5614e9a7

New pseudo datetime for year-only values (31.12. instead of 15.6.)
author mschaefer
date Fri, 04 May 2018 14:03:47 +0200
parents fe81eb39080c
children
rev   line source
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 *
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5895
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5895
diff changeset
6 * documentation coming with Dive4Elements River for details.
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 */
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8
8187
3bb1c62ad732 Moved package org.dive4elements.river.utils to org.dive4elements.river.backend.utils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5992
diff changeset
9 package org.dive4elements.river.backend.utils;
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
10
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import java.util.Calendar;
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
12 import java.util.Date;
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
13 import java.util.regex.Matcher;
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import java.util.regex.Pattern;
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
9055
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
16 import org.dive4elements.river.model.TimeInterval;
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
17
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 public final class DateGuesser {
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 public static final String [] MONTH = {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
20 "jan", "feb", "mrz", "apr", "mai", "jun",
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
21 "jul", "aug", "sep", "okt", "nov", "dez"
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 };
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
24 public static final int guessMonth(final String s) {
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
25 final String t = s.toLowerCase();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 for (int i = 0; i < MONTH.length; ++i)
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
27 if (MONTH[i].equals(t)) {
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 return i;
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 return -1;
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 public static final Pattern YYYY_MM_DD =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
34 Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 public static final Pattern DD_MM_YYYY =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
37 Pattern.compile("^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{2,4})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 public static final Pattern MMM_YYYY =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
40 Pattern.compile("^((\\d{1,2})\\.)?(\\w{3})[\\. -]?((\\d\\d)|(\\d{4}))$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 public static final Pattern GARBAGE_YYYY =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
43 Pattern.compile("^[^\\d=]*((\\d\\d)|([12]\\d{3}))$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 public static final Pattern YYYY_MM_DDThh_mm =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
46 Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 public static final Pattern YYYY_MM_DDThh_mm_ss =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
49 Pattern.compile(
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
50 "^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 public static final Pattern DD_MM_YYYYThh_mm =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
53 Pattern.compile(
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
54 "^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{2,4})T(\\d{1,2}):(\\d{2})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 public static final Pattern DD_MM_YYYYThh_mm_ss =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
57 Pattern.compile("^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{2,4})"
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
58 + "T(\\d{1,2}):(\\d{2}):(\\d{2})$");
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
60 public static final Pattern DDMMYY =
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
61 Pattern.compile("^(\\d{2})(\\d{2})(\\d{2})$");
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
62
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 private DateGuesser() {
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
66 public static final int calendarMonth(final String month) {
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 return calendarMonth(Integer.parseInt(month));
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
70 public static final int calendarMonth(final int month) {
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 return Math.max(Math.min(month-1, 11), 0);
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73
4764
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
74 /**
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
75 * Guess date by trying all different patterns.
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
76 * Throws IllegalArgumentException if not able to guess.
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
77 * @param s The date to be guessed (e.g. 11.02.2001).
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
78 * @return the parsed Date.
1cfda99c024c DateGuesser: doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4763
diff changeset
79 */
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
80 public static Date guessDate(final String s) {
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
81 if ((s == null) || s.trim().isEmpty()) {
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 throw new IllegalArgumentException();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
85 final String t = s.trim();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 Matcher m;
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
88 m = YYYY_MM_DD.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
91 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
92 final String year = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
93 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
94 final String day = m.group(3);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
95 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
97 Integer.parseInt(year),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
98 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
99 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
100 12, 0, 0);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
104 m = DD_MM_YYYY.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
107 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
108 final String year = m.group(3);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
109 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
110 final String day = m.group(1);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
111 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
113 Integer.parseInt(year) + (year.length() == 2 ? 1900 : 0),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
114 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
115 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
116 12, 0, 0);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
120 m = MMM_YYYY.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
123 final int month = guessMonth(m.group(3));
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 if (month >= 0) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
125 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
126 final String year = m.group(4);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
127 final String day = m.group(1);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
128 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
130 Integer.parseInt(year) + (year.length() == 2 ? 1900 : 0),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
131 month,
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
132 ((day == null) || day.isEmpty()) ? 15 : Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
133 12, 0, 0);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
138 m = YYYY_MM_DDThh_mm.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
141 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
142 final String year = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
143 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
144 final String day = m.group(3);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
145 final String hour = m.group(4);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
146 final String minute = m.group(5);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
147 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
149 Integer.parseInt(year),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
150 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
151 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
152 Integer.parseInt(hour),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
153 Integer.parseInt(minute),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
154 0
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
155 );
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
159 m = YYYY_MM_DDThh_mm_ss.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
162 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
163 final String year = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
164 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
165 final String day = m.group(3);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
166 final String hour = m.group(4);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
167 final String minute = m.group(5);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
168 final String second = m.group(6);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
169 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
171 Integer.parseInt(year),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
172 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
173 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
174 Integer.parseInt(hour),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
175 Integer.parseInt(minute),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
176 Integer.parseInt(second)
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
177 );
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
181 m = DD_MM_YYYYThh_mm.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
184 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
185 final String year = m.group(3);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
186 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
187 final String day = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
188 final String hour = m.group(4);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
189 final String minute = m.group(5);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
190 cal.clear();
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
192 Integer.parseInt(year) + (year.length() == 2 ? 1900 : 0),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
193 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
194 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
195 Integer.parseInt(hour),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
196 Integer.parseInt(minute),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
197 0
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
198 );
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
202 m = DD_MM_YYYYThh_mm_ss.matcher(t);
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
203
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
204 if (m.matches()) {
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
205 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
206 final String year = m.group(3);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
207 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
208 final String day = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
209 final String hour = m.group(4);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
210 final String minute = m.group(5);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
211 final String second = m.group(6);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
212 cal.clear();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
213 cal.set(
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
214 Integer.parseInt(year) + (year.length() == 2 ? 1900 : 0),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
215 calendarMonth(month),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
216 Integer.parseInt(day),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
217 Integer.parseInt(hour),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
218 Integer.parseInt(minute),
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
219 Integer.parseInt(second)
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
220 );
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
221 return cal.getTime();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
222 }
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
223
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
224 m = DDMMYY.matcher(t);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
225
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
226 if (m.matches()) {
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
227 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
228 final String day = m.group(1);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
229 final String month = m.group(2);
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
230 final String yearS = m.group(3);
4770
28fa48986ae9 DateGuesser: Take current year modulo 100 if compare it with a two digit year value. Removed auto boxing.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4764
diff changeset
231 int year = Integer.parseInt(yearS);
28fa48986ae9 DateGuesser: Take current year modulo 100 if compare it with a two digit year value. Removed auto boxing.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4764
diff changeset
232
28fa48986ae9 DateGuesser: Take current year modulo 100 if compare it with a two digit year value. Removed auto boxing.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4764
diff changeset
233 if (year <= cal.get(Calendar.YEAR) % 100) {
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
234 year += 2000;
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
235 }
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
236 else {
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
237 year += 1900;
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
238 }
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
239 // TODO Warning: two digit year
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
240 cal.clear();
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
241 cal.set(
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
242 year,
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
243 Integer.parseInt(month), // month
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
244 Integer.parseInt(day), // day
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
245 12, 0, 0);
4763
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
246 return cal.getTime();
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
247 }
8195396b23ce DateGuesser: Added and handle DDMMYY pattern.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2357
diff changeset
248
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
249 m = GARBAGE_YYYY.matcher(t);
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
251 if (m.matches() && !t.contains("HQ") && !t.contains("HW")) {
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
252 final Calendar cal = Calendar.getInstance();
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
253 final String year = m.group(1);
5895
4110565baff8 backend: Fixed DateGuesser for DDMMYY.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5882
diff changeset
254 cal.clear();
9055
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
255 cal.set(Integer.parseInt(year) + (year.length() == 2 ? 1900 : 0),
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
256 TimeInterval.YEAR_ONLY_DATE.get(Calendar.MONTH),
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
257 TimeInterval.YEAR_ONLY_DATE.get(Calendar.DAY_OF_MONTH),
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
258 TimeInterval.YEAR_ONLY_DATE.get(Calendar.HOUR_OF_DAY),
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
259 TimeInterval.YEAR_ONLY_DATE.get(Calendar.MINUTE),
df5c5614e9a7 New pseudo datetime for year-only values (31.12. instead of 15.6.)
mschaefer
parents: 8969
diff changeset
260 TimeInterval.YEAR_ONLY_DATE.get(Calendar.SECOND));
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 return cal.getTime();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
264 throw new IllegalArgumentException();
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
265 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
266
8969
fe81eb39080c Avoid guessing year 1950 for HQ50 etc.
mschaefer
parents: 8856
diff changeset
267 public static void main(final String [] args) {
2357
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 for (int i = 0; i < args.length; ++i) {
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269 System.out.println(args[i] + ": " + guessDate(args[i]));
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272 }
2e18e12fac11 Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
273 // end of file

http://dive4elements.wald.intevation.org