0 | 0 |
/**
|
1 | 1 |
*
|
2 | |
* Copyright © 2014-2018 Florian Schmaus
|
|
2 |
* Copyright © 2014-2021 Florian Schmaus
|
3 | 3 |
*
|
4 | 4 |
* Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 |
* you may not use this file except in compliance with the License.
|
|
24 | 24 |
import java.util.Comparator;
|
25 | 25 |
import java.util.Date;
|
26 | 26 |
import java.util.List;
|
|
27 |
import java.util.Locale;
|
27 | 28 |
import java.util.TimeZone;
|
28 | 29 |
import java.util.regex.Matcher;
|
29 | 30 |
import java.util.regex.Pattern;
|
|
57 | 58 |
|
58 | 59 |
private static final TimeZone TIME_ZONE_UTC = TimeZone.getTimeZone("UTC");
|
59 | 60 |
|
|
61 |
private static DateFormat constructUtcDateFormat(String format) {
|
|
62 |
DateFormat dateFormat = new SimpleDateFormat(format, Locale.ENGLISH);
|
|
63 |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
64 |
return dateFormat;
|
|
65 |
}
|
|
66 |
|
60 | 67 |
private static final ThreadLocal<DateFormat> xep0091Formatter = new ThreadLocal<DateFormat>() {
|
61 | 68 |
@Override
|
62 | 69 |
protected DateFormat initialValue() {
|
63 | |
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss");
|
64 | |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
70 |
DateFormat dateFormat = constructUtcDateFormat("yyyyMMdd'T'HH:mm:ss");
|
65 | 71 |
return dateFormat;
|
66 | 72 |
}
|
67 | 73 |
};
|
68 | 74 |
private static final ThreadLocal<DateFormat> xep0091Date6DigitFormatter = new ThreadLocal<DateFormat>() {
|
69 | 75 |
@Override
|
70 | 76 |
protected DateFormat initialValue() {
|
71 | |
DateFormat dateFormat = new SimpleDateFormat("yyyyMd'T'HH:mm:ss");
|
72 | |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
77 |
DateFormat dateFormat = constructUtcDateFormat("yyyyMd'T'HH:mm:ss");
|
73 | 78 |
return dateFormat;
|
74 | 79 |
}
|
75 | 80 |
};
|
76 | 81 |
private static final ThreadLocal<DateFormat> xep0091Date7Digit1MonthFormatter = new ThreadLocal<DateFormat>() {
|
77 | 82 |
@Override
|
78 | 83 |
protected DateFormat initialValue() {
|
79 | |
DateFormat dateFormat = new SimpleDateFormat("yyyyMdd'T'HH:mm:ss");
|
80 | |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
84 |
DateFormat dateFormat = constructUtcDateFormat("yyyyMdd'T'HH:mm:ss");
|
81 | 85 |
dateFormat.setLenient(false);
|
82 | 86 |
return dateFormat;
|
83 | 87 |
}
|
|
85 | 89 |
private static final ThreadLocal<DateFormat> xep0091Date7Digit2MonthFormatter = new ThreadLocal<DateFormat>() {
|
86 | 90 |
@Override
|
87 | 91 |
protected DateFormat initialValue() {
|
88 | |
DateFormat dateFormat = new SimpleDateFormat("yyyyMMd'T'HH:mm:ss");
|
89 | |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
92 |
DateFormat dateFormat = constructUtcDateFormat("yyyyMMd'T'HH:mm:ss");
|
90 | 93 |
dateFormat.setLenient(false);
|
91 | 94 |
return dateFormat;
|
92 | 95 |
}
|
|
124 | 127 |
FORMATTER = new ThreadLocal<DateFormat>() {
|
125 | 128 |
@Override
|
126 | 129 |
protected DateFormat initialValue() {
|
127 | |
DateFormat dateFormat = new SimpleDateFormat(FORMAT_STRING);
|
128 | |
dateFormat.setTimeZone(TIME_ZONE_UTC);
|
|
130 |
DateFormat dateFormat = constructUtcDateFormat(FORMAT_STRING);
|
129 | 131 |
return dateFormat;
|
130 | 132 |
}
|
131 | 133 |
};
|