From 6a76afa38ddf64d3517286b2c33eec3317cff004 Mon Sep 17 00:00:00 2001
From: Bar Rotstein
Date: Wed, 1 Aug 2018 20:35:11 +0300
Subject: [PATCH 01/17] SOLR-12586: ParsingFieldUpdateProcessor use java.time
instead of joda-time
---
.../ParseDateFieldUpdateProcessorFactory.java | 51 +++++--
...config-parsing-update-processor-chains.xml | 40 +++---
.../ParsingFieldUpdateProcessorsTest.java | 124 ++++++++++--------
solr/licenses/joda-time-NOTICE.txt | 5 -
4 files changed, 129 insertions(+), 91 deletions(-)
delete mode 100644 solr/licenses/joda-time-NOTICE.txt
diff --git a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
index 234b48bc15e4..1cf13b9b36fa 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/ParseDateFieldUpdateProcessorFactory.java
@@ -17,11 +17,23 @@
package org.apache.solr.update.processor;
import java.lang.invoke.MethodHandles;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
+import java.time.temporal.TemporalAccessor;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.TimeZone;
import org.apache.commons.lang.LocaleUtils;
import org.apache.solr.common.util.NamedList;
@@ -31,10 +43,6 @@
import org.apache.solr.schema.DateValueFieldType;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,8 +65,8 @@
*
*
* One or more date "format" specifiers must be specified. See
- * Joda-time's DateTimeFormat javadocs for a description of format strings.
+ * Java 8's DateTimeFormatter javadocs for a description of format strings.
*
*
* A default time zone name or offset may optionally be specified for those dates
@@ -115,9 +123,10 @@ protected Object mutateValue(Object srcVal) {
for (Map.Entry format : formats.entrySet()) {
DateTimeFormatter parser = format.getValue();
try {
- DateTime dateTime = parser.parseDateTime(srcStringVal);
- return dateTime.withZone(DateTimeZone.UTC).toDate();
- } catch (IllegalArgumentException e) {
+ TemporalAccessor parsedTemporalDate = parser.parseBest(srcStringVal, OffsetDateTime::from,
+ ZonedDateTime::from, LocalDateTime::from, LocalDate::from, Instant::from);
+ return temporalToDate(parsedTemporalDate, parser.getZone());
+ } catch (DateTimeParseException e) {
log.debug("value '{}' is not parseable with format '{}'",
new Object[] { srcStringVal, format.getKey() });
}
@@ -144,15 +153,19 @@ public void init(NamedList args) {
}
Object defaultTimeZoneParam = args.remove(DEFAULT_TIME_ZONE_PARAM);
- DateTimeZone defaultTimeZone = DateTimeZone.UTC;
+ ZoneId defaultTimeZone = ZoneOffset.UTC;
if (null != defaultTimeZoneParam) {
- defaultTimeZone = DateTimeZone.forID(defaultTimeZoneParam.toString());
+ TimeZone.getTimeZone(defaultTimeZoneParam.toString());
+ defaultTimeZone = ZoneId.of(defaultTimeZoneParam.toString());
}
Collection formatsParam = args.removeConfigArgs(FORMATS_PARAM);
if (null != formatsParam) {
for (String value : formatsParam) {
- formats.put(value, DateTimeFormat.forPattern(value).withZone(defaultTimeZone).withLocale(locale));
+ DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive()
+ .appendPattern(value).toFormatter(locale).withZone(defaultTimeZone);
+ formats.put(value, formatter);
+ // formats.put(value, DateTimeFormat.forPattern(value).withZone(defaultTimeZone).withLocale(locale));
}
}
super.init(args);
@@ -172,4 +185,18 @@ public void init(NamedList args) {
return (null == type) || type instanceof DateValueFieldType;
};
}
+
+ private Date temporalToDate(TemporalAccessor in, ZoneId timeZoneId) {
+ if(in instanceof OffsetDateTime) {
+ return Date.from(((OffsetDateTime) in).toInstant());
+ } else if(in instanceof ZonedDateTime) {
+ return Date.from(((ZonedDateTime) in).withZoneSameInstant(timeZoneId).toInstant());
+ } else if(in instanceof LocalDateTime) {
+ return Date.from(((LocalDateTime) in).atZone(timeZoneId).toInstant());
+ } else if(in instanceof Instant) {
+ return Date.from((Instant) in);
+ } else {
+ return Date.from(((LocalDate) in).atStartOfDay(timeZoneId).toInstant());
+ }
+ }
}
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-parsing-update-processor-chains.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-parsing-update-processor-chains.xml
index 5930d37d7756..da359b8db06b 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-parsing-update-processor-chains.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-parsing-update-processor-chains.xml
@@ -29,35 +29,35 @@
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
false
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
solr.DatePointField
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
solr.TrieDateField
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
@@ -65,7 +65,7 @@
America/New_York
en_US
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
yyyy-MM-dd'T'HH:mm:ss.SSS
@@ -75,7 +75,7 @@
America/Los_Angeles
- MM/dd/yyyy
+ M/d/yyyy
@@ -85,30 +85,30 @@
UTC
en_US
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
- yyyy-MM-dd'T'HH:mm:ss,SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
+ yyyy-MM-dd'T'HH:mm:ss,SSSZZZZZ
yyyy-MM-dd'T'HH:mm:ss.SSS
yyyy-MM-dd'T'HH:mm:ss,SSS
- yyyy-MM-dd'T'HH:mm:ssZ
+ yyyy-MM-dd'T'HH:mm:ssZZZZZ
yyyy-MM-dd'T'HH:mm:ss
- yyyy-MM-dd'T'HH:mmZ
+ yyyy-MM-dd'T'HH:mmZZZZZ
yyyy-MM-dd'T'HH:mm
- yyyy-MM-dd HH:mm:ss.SSSZ
- yyyy-MM-dd HH:mm:ss,SSSZ
+ yyyy-MM-dd HH:mm:ss.SSSZZZZZ
+ yyyy-MM-dd HH:mm:ss,SSSZZZZZ
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss,SSS
- yyyy-MM-dd HH:mm:ssZ
+ yyyy-MM-dd HH:mm:ssZZZZZ
yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd HH:mmZ
+ yyyy-MM-dd HH:mmZZZZZ
yyyy-MM-dd HH:mm
yyyy-MM-dd hh:mm a
yyyy-MM-dd hh:mma
yyyy-MM-dd
- EEE MMM dd HH:mm:ss Z yyyy
- EEE MMM dd HH:mm:ss yyyy Z
+ EEE MMM dd HH:mm:ss ZZZ yyyy
+ EEE MMM dd HH:mm:ss yyyy ZZZZZ
EEE MMM dd HH:mm:ss yyyy
- EEE, dd MMM yyyy HH:mm:ss Z
- EEEE, dd-MMM-yy HH:mm:ss Z
+ EEE, dd MMM yyyy HH:mm:ss ZZZZZ
+ EEEE, dd-MMM-yy HH:mm:ss ZZZZZ
EEEE, MMMM dd, yyyy
MMMM dd, yyyy
MMM. dd, yyyy
@@ -229,7 +229,7 @@
yyyy-MM-dd
- yyyy-MM-dd'T'HH:mm:ss.SSSZ
+ yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ
yyyy-MM-dd'T'HH:mm
diff --git a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
index 3aeb1fbfccfb..b5af7d5110b6 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
@@ -18,13 +18,17 @@
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.schema.IndexSchema;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-import org.joda.time.format.ISODateTimeFormat;
import org.junit.BeforeClass;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -50,10 +54,9 @@ public void testParseDateRoundTrip() throws Exception {
String dateString = "2010-11-12T13:14:15.168Z";
SolrInputDocument d = processAdd("parse-date", doc(f("id", "9"), f("date_dt", dateString)));
assertNotNull(d);
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ ZonedDateTime localDateTime = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
assertTrue(d.getFieldValue("date_dt") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date) d.getFieldValue("date_dt")).getTime());
+ assertEquals(localDateTime.withZoneSameInstant(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date) d.getFieldValue("date_dt")).getTime());
assertU(commit());
assertQ(req("id:9"), "//date[@name='date_dt'][.='" + dateString + "']");
}
@@ -64,10 +67,9 @@ public void testParseTrieDateRoundTrip() throws Exception {
String dateString = "2010-11-12T13:14:15.168Z";
SolrInputDocument d = processAdd("parse-date", doc(f("id", "39"), f("date_tdt", dateString)));
assertNotNull(d);
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ ZonedDateTime localDateTime = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
assertTrue(d.getFieldValue("date_tdt") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date) d.getFieldValue("date_tdt")).getTime());
+ assertEquals(localDateTime.withZoneSameInstant(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date) d.getFieldValue("date_tdt")).getTime());
assertU(commit());
assertQ(req("id:39"), "//date[@name='date_tdt'][.='" + dateString + "']");
}
@@ -77,14 +79,13 @@ public void testParseDateFieldNotInSchema() throws Exception {
IndexSchema schema = h.getCore().getLatestSchema();
assertNull(schema.getFieldOrNull("not_in_schema"));
String dateString = "2010-11-12T13:14:15.168Z";
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ ZonedDateTime localDateTime = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
SolrInputDocument d = processAdd("parse-date-no-run-processor",
doc(f("id", "18"), f("not_in_schema", dateString)));
assertNotNull(d);
assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date)d.getFieldValue("not_in_schema")).getTime());
+ assertEquals(localDateTime.withZoneSameInstant(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date)d.getFieldValue("not_in_schema")).getTime());
d = processAdd("parse-date-no-run-processor",
doc(f("id", "36"), f("not_in_schema", "not a date", dateString)));
@@ -116,12 +117,12 @@ public void testParseDateNonUTCdefaultTimeZoneRoundTrip() throws Exception {
("parse-date-non-UTC-defaultTimeZone", doc(f("id", "99"), f("dateUTC_dt", dateStringUTC),
f("dateNoTimeZone_dt", dateStringNoTimeZone)));
assertNotNull(d);
- String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
- DateTimeFormatter dateTimeFormatterUTC = DateTimeFormat.forPattern(pattern);
- DateTime dateTimeUTC = dateTimeFormatterUTC.parseDateTime(dateStringUTC);
+ String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ";
+ DateTimeFormatter UTCForamatter = DateTimeFormatter.ofPattern(pattern).withZone(ZoneId.of("America/New_York"));
+ OffsetDateTime dateTimeOffsetUTC = OffsetDateTime.parse(dateStringUTC, UTCForamatter);
assertTrue(d.getFieldValue("dateUTC_dt") instanceof Date);
assertTrue(d.getFieldValue("dateNoTimeZone_dt") instanceof Date);
- assertEquals(dateTimeUTC.getMillis(), ((Date) d.getFieldValue("dateUTC_dt")).getTime());
+ assertEquals(dateTimeOffsetUTC.toInstant().toEpochMilli(), ((Date) d.getFieldValue("dateUTC_dt")).getTime());
assertU(commit());
assertQ(req("id:99")
,"//date[@name='dateUTC_dt'][.='" + dateStringUTC + "']"
@@ -132,22 +133,20 @@ public void testParseDateExplicitNotInSchemaSelector() throws Exception {
IndexSchema schema = h.getCore().getLatestSchema();
assertNull(schema.getFieldOrNull("not_in_schema"));
String dateString = "2010-11-12T13:14:15.168Z";
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ ZonedDateTime localDateTime = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
SolrInputDocument d = processAdd("parse-date-explicit-not-in-schema-selector-no-run-processor",
doc(f("id", "88"), f("not_in_schema", dateString)));
assertNotNull(d);
assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date)d.getFieldValue("not_in_schema")).getTime());
+ assertEquals(localDateTime.withZoneSameInstant(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date)d.getFieldValue("not_in_schema")).getTime());
}
public void testParseDateExplicitTypeClassSelector() throws Exception {
IndexSchema schema = h.getCore().getLatestSchema();
assertNotNull(schema.getFieldOrNull("date_dt"));
String dateString = "2010-11-12T13:14:15.168Z";
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
SolrInputDocument d;
if (schema.getField("date_dt").getType().isPointField()) {
d = processAdd("parse-date-explicit-typeclass-point-selector-no-run-processor",
@@ -159,7 +158,7 @@ public void testParseDateExplicitTypeClassSelector() throws Exception {
assertNotNull(d);
assertTrue(d.getFieldValue("date_dt") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date)d.getFieldValue("date_dt")).getTime());
+ assertEquals(zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date)d.getFieldValue("date_dt")).getTime());
}
public void testParseUSPacificDate() throws Exception {
@@ -171,36 +170,36 @@ public void testParseUSPacificDate() throws Exception {
doc(f("id", "288"), f("not_in_schema", dateString)));
assertNotNull(d);
assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
- assertEquals(dateStringUTC,
- (new DateTime(((Date)d.getFieldValue("not_in_schema")).getTime(),DateTimeZone.UTC)).toString());
+ assertEquals(dateStringUTC,
+ (ZonedDateTime.ofInstant(((Date)d.getFieldValue("not_in_schema")).toInstant(), ZoneOffset.UTC)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")));
}
public void testParseDateFormats() throws Exception {
String[] formatExamples = {
- "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "2010-01-15T00:00:00.000Z",
- "yyyy-MM-dd'T'HH:mm:ss,SSSZ", "2010-01-15T00:00:00,000Z",
+ "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", "2010-01-15T00:00:00.000Z",
+ "yyyy-MM-dd'T'HH:mm:ss,SSSZZZZZ", "2010-01-15T00:00:00,000Z",
"yyyy-MM-dd'T'HH:mm:ss.SSS", "2010-01-15T00:00:00.000",
"yyyy-MM-dd'T'HH:mm:ss,SSS", "2010-01-15T00:00:00,000",
- "yyyy-MM-dd'T'HH:mm:ssZ", "2010-01-15T00:00:00Z",
+ "yyyy-MM-dd'T'HH:mm:ssZZZZZ", "2010-01-15T00:00:00Z",
"yyyy-MM-dd'T'HH:mm:ss", "2010-01-15T00:00:00",
- "yyyy-MM-dd'T'HH:mmZ", "2010-01-15T00:00Z",
+ "yyyy-MM-dd'T'HH:mmZZZZZ", "2010-01-15T00:00Z",
"yyyy-MM-dd'T'HH:mm", "2010-01-15T00:00",
- "yyyy-MM-dd HH:mm:ss.SSSZ", "2010-01-15 00:00:00.000Z",
- "yyyy-MM-dd HH:mm:ss,SSSZ", "2010-01-15 00:00:00,000Z",
+ "yyyy-MM-dd HH:mm:ss.SSSZZZZZ", "2010-01-15 00:00:00.000Z",
+ "yyyy-MM-dd HH:mm:ss,SSSZZZZZ", "2010-01-15 00:00:00,000Z",
"yyyy-MM-dd HH:mm:ss.SSS", "2010-01-15 00:00:00.000",
"yyyy-MM-dd HH:mm:ss,SSS", "2010-01-15 00:00:00,000",
- "yyyy-MM-dd HH:mm:ssZ", "2010-01-15 00:00:00Z",
+ "yyyy-MM-dd HH:mm:ssZZZZZ", "2010-01-15 00:00:00Z",
"yyyy-MM-dd HH:mm:ss", "2010-01-15 00:00:00",
- "yyyy-MM-dd HH:mmZ", "2010-01-15 00:00Z",
+ "yyyy-MM-dd HH:mmZZZZZ", "2010-01-15 00:00Z",
"yyyy-MM-dd HH:mm", "2010-01-15 00:00",
"yyyy-MM-dd hh:mm a", "2010-01-15 12:00 AM",
"yyyy-MM-dd hh:mma", "2010-01-15 12:00AM",
"yyyy-MM-dd", "2010-01-15",
- "EEE MMM dd HH:mm:ss Z yyyy", "Fri Jan 15 00:00:00 +0000 2010",
- "EEE MMM dd HH:mm:ss yyyy Z", "Fri Jan 15 00:00:00 2010 +00:00",
+ "EEE MMM dd HH:mm:ss ZZZ yyyy", "Fri Jan 15 00:00:00 +0000 2010",
+ "EEE MMM dd HH:mm:ss yyyy ZZZZZ", "Fri Jan 15 00:00:00 2010 +00:00",
"EEE MMM dd HH:mm:ss yyyy", "Fri Jan 15 00:00:00 2010",
- "EEE, dd MMM yyyy HH:mm:ss Z", "Fri, 15 Jan 2010 00:00:00 +00:00",
- "EEEE, dd-MMM-yy HH:mm:ss Z", "Friday, 15-Jan-10 00:00:00 +00:00",
+ "EEE, dd MMM yyyy HH:mm:ss ZZZZZ", "Fri, 15 Jan 2010 00:00:00 +00:00",
+ "EEEE, dd-MMM-yy HH:mm:ss ZZZZZ", "Friday, 15-Jan-10 00:00:00 +00:00",
"EEEE, MMMM dd, yyyy", "Friday, January 15, 2010",
"MMMM dd, yyyy", "January 15, 2010",
"MMM. dd, yyyy", "Jan. 15, 2010"
@@ -209,9 +208,9 @@ public void testParseDateFormats() throws Exception {
IndexSchema schema = h.getCore().getLatestSchema();
assertNotNull(schema.getFieldOrNull("dateUTC_dt")); // should match "*_dt" dynamic field
- String dateTimePattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
- DateTimeFormatter dateTimeFormatterUTC = DateTimeFormat.forPattern(dateTimePattern);
- DateTime dateTimeUTC = dateTimeFormatterUTC.parseDateTime(formatExamples[1]);
+ String dateTimePattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ";
+ DateTimeFormatter UTCDateTimeFormatter = DateTimeFormatter.ofPattern(dateTimePattern);
+ ZonedDateTime UTCDateTIme = ZonedDateTime.parse(formatExamples[1], UTCDateTimeFormatter);
for (int i = 0 ; i < formatExamples.length ; i += 2) {
String format = formatExamples[i];
@@ -220,10 +219,10 @@ public void testParseDateFormats() throws Exception {
SolrInputDocument d = processAdd("parse-date-UTC-defaultTimeZone-no-run-processor",
doc(f("id", id), f("dateUTC_dt", dateString)));
assertNotNull(d);
- assertTrue("date '" + dateString + "' with format '" + format + "' is not mutated to a Date",
- d.getFieldValue("dateUTC_dt") instanceof Date);
+ assertTrue("index: " + i + " date '" + dateString + "' with format '" + format +
+ "' is not mutated to a Date", d.getFieldValue("dateUTC_dt") instanceof Date);
assertEquals("date '" + dateString + "' with format '" + format + "' mismatched milliseconds",
- dateTimeUTC.getMillis(), ((Date)d.getFieldValue("dateUTC_dt")).getTime());
+ UTCDateTIme.toInstant().toEpochMilli(), ((Date)d.getFieldValue("dateUTC_dt")).getTime());
}
}
@@ -232,23 +231,23 @@ public void testParseFrenchDate() throws Exception {
assertNull(schema.getFieldOrNull("not_in_schema"));
String frenchDateString = "le vendredi 15 janvier 2010";
String dateString = "2010-01-15T00:00:00.000Z";
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
- DateTime dateTime = dateTimeFormatter.parseDateTime(dateString);
+ LocalDateTime localDateTime = LocalDateTime.parse(dateString, DateTimeFormatter.ISO_DATE_TIME);
SolrInputDocument d = processAdd("parse-french-date-UTC-defaultTimeZone-no-run-processor",
doc(f("id", "88"), f("not_in_schema", frenchDateString)));
assertNotNull(d);
assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
- assertEquals(dateTime.getMillis(), ((Date)d.getFieldValue("not_in_schema")).getTime());
+ assertEquals(localDateTime.atZone(ZoneOffset.UTC).toInstant().toEpochMilli(), ((Date)d.getFieldValue("not_in_schema")).getTime());
}
public void testFailedParseMixedDate() throws Exception {
IndexSchema schema = h.getCore().getLatestSchema();
assertNull(schema.getFieldOrNull("not_in_schema"));
- DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateOptionalTimeParser().withZoneUTC();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd['T'HH:mm][:ss.SSSZZZZZ]").withZone(ZoneOffset.UTC);
Map