use custom date parser
A specialized date parser that can only handle ISO-8601 like dates (2011-12-03T10:15:30.123Z or 2011-12-03T10:15:30+01:00) but does this roughly 10 times faster than DateTimeFormatter and 5 times faster than the FastDateParser of commons-lang3.
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package org.lucares.pdbui.date;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
@Test
|
||||
public class FastISODateParserTest {
|
||||
|
||||
@DataProvider(name = "providerValidDate")
|
||||
public Object[][] providerValidDate() {
|
||||
return new Object[][] { //
|
||||
{ "2018-11-18T14:42:49.123456789Z" }, //
|
||||
{ "2018-11-18T14:42:49.123456789+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.12345678Z" }, //
|
||||
{ "2018-11-18T14:42:49.12345678+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.1234567Z" }, //
|
||||
{ "2018-11-18T14:42:49.1234567+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.123456Z" }, //
|
||||
{ "2018-11-18T14:42:49.123456+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.33256Z" }, //
|
||||
{ "2018-11-18T14:42:49.33256+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.3325Z" }, //
|
||||
{ "2018-11-18T14:42:49.3325+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.332Z" }, //
|
||||
{ "2018-11-18T14:42:49.332+00:00" }, //
|
||||
{ "2018-11-18T14:42:49.332+12:34" }, //
|
||||
{ "2018-11-18T14:42:49.332-01:23" }, //
|
||||
{ "2018-11-18T14:55:49.44Z" }, //
|
||||
{ "2018-11-18T14:55:49.55-01:23" }, //
|
||||
{ "2018-11-18T14:55:49.4Z" }, //
|
||||
{ "2018-11-18T14:55:49.5-01:23" }, //
|
||||
{ "2018-11-18T14:55:49.Z" }, //
|
||||
{ "2018-11-18T14:55:49.-01:23" }, //
|
||||
{ "2018-11-18T14:55:49Z" }, //
|
||||
{ "2018-11-18T14:55:49-01:23" },//
|
||||
};
|
||||
}
|
||||
|
||||
@Test(dataProvider = "providerValidDate")
|
||||
public void testParseValidDate(final String date) {
|
||||
|
||||
final OffsetDateTime actualDate = FastISODateParser.parse(date);
|
||||
|
||||
final OffsetDateTime expectedDate = OffsetDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(date));
|
||||
Assert.assertEquals(actualDate, expectedDate);
|
||||
}
|
||||
|
||||
@DataProvider(name = "providerParseInvalidDate")
|
||||
public Object[][] providerParseInvalidDate() {
|
||||
return new Object[][] { //
|
||||
{ "a2018-11-18T14:42:49.332Z" }, //
|
||||
{ "a018-11-18T14:42:49.332Z" }, //
|
||||
{ "2a18-11-18T14:42:49.332Z" }, //
|
||||
{ "20a8-11-18T14:42:49.332Z" }, //
|
||||
{ "201a-11-18T14:42:49.332Z" }, //
|
||||
{ "2018-a1-18T14:42:49.332Z" }, //
|
||||
{ "2018-1a-18T14:42:49.332Z" }, //
|
||||
{ "2018-11-a8T14:42:49.332Z" }, //
|
||||
{ "2018-11-1aT14:42:49.332Z" }, //
|
||||
{ "2018-11-18Ta4:42:49.332Z" }, //
|
||||
{ "2018-11-18T1a:42:49.332Z" }, //
|
||||
{ "2018-11-18T14:a2:49.332Z" }, //
|
||||
{ "2018-11-18T14:4a:49.332Z" }, //
|
||||
{ "2018-11-18T14:42:a9.332Z" }, //
|
||||
{ "2018-11-18T14:42:4a.332Z" }, //
|
||||
{ "2018-11-18T14:42:49.a32Z" }, //
|
||||
{ "2018-11-18T14:42:49.3a2Z" }, //
|
||||
{ "2018-11-18T14:42:49.33aZ" }, //
|
||||
{ "2018-11-18T14:42:49.332a" }, //
|
||||
{ "2018-11-18T14:42:49.332a00:00" }, //
|
||||
{ "2018-11-18T14:42:49.332+a0:00" }, //
|
||||
{ "2018-11-18T14:42:49.332+0a:00" }, //
|
||||
{ "2018-11-18T14:42:49.332+00:a0" }, //
|
||||
{ "2018-11-18T14:42:49.332+00:0a" }//
|
||||
};
|
||||
}
|
||||
|
||||
@Test(expectedExceptions = IllegalArgumentException.class, dataProvider = "providerParseInvalidDate")
|
||||
public void testParseInvalidDate(final String invalidDate) {
|
||||
FastISODateParser.parse(invalidDate);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user