Parse dates with multiple formats (#13348)
Code examples for "Parsing Date Strings with Varying Formats"
This commit is contained in:
parent
b86f875dbe
commit
5c2126b626
|
@ -0,0 +1,20 @@
|
||||||
|
package com.baeldung.parsingDates;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import org.joda.time.LocalDate;
|
||||||
|
import org.joda.time.format.DateTimeFormat;
|
||||||
|
|
||||||
|
public class SimpleDateTimeFormat {
|
||||||
|
|
||||||
|
public static LocalDate parseDate(String date) {
|
||||||
|
List<String> patternList = Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd");
|
||||||
|
for (String pattern : patternList) {
|
||||||
|
try {
|
||||||
|
return DateTimeFormat.forPattern(pattern).parseLocalDate(date);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.parsingDates;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.format.DateTimeFormatterBuilder;
|
||||||
|
|
||||||
|
public class SimpleDateTimeFormater {
|
||||||
|
|
||||||
|
public static LocalDate parseDate(String date) {
|
||||||
|
DateTimeFormatterBuilder dateTimeFormatterBuilder = new DateTimeFormatterBuilder()
|
||||||
|
.append(DateTimeFormatter.ofPattern("[MM/dd/yyyy]" + "[dd-MM-yyyy]" + "[yyyy-MM-dd]"));
|
||||||
|
|
||||||
|
DateTimeFormatter dateTimeFormatter = dateTimeFormatterBuilder.toFormatter();
|
||||||
|
|
||||||
|
return LocalDate.parse(date, dateTimeFormatter);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.parsingDates;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.Date;
|
||||||
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
|
|
||||||
|
public class SimpleDateUtils {
|
||||||
|
|
||||||
|
public static Date parseDate(String date) {
|
||||||
|
try {
|
||||||
|
return DateUtils.parseDateStrictly(date,
|
||||||
|
new String[]{"yyyy/MM/dd", "dd/MM/yyyy", "yyyy-MM-dd"});
|
||||||
|
} catch (ParseException ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.parsingDates;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SimpleParseDate {
|
||||||
|
|
||||||
|
public Date parseDate(String dateString, List<String> formatStrings) {
|
||||||
|
for (String formatString : formatStrings) {
|
||||||
|
try {
|
||||||
|
return new SimpleDateFormat(formatString).parse(dateString);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.baeldung.parsingDates;
|
||||||
|
|
||||||
|
import com.baeldung.parsingDates.SimpleDateTimeFormat;
|
||||||
|
import com.baeldung.parsingDates.SimpleDateTimeFormater;
|
||||||
|
import com.baeldung.parsingDates.SimpleDateUtils;
|
||||||
|
import com.baeldung.parsingDates.SimpleParseDate;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import org.junit.*;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import org.joda.time.LocalDate;
|
||||||
|
|
||||||
|
public class SimpleParseDateUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenInvalidInput_thenGettingUnexpectedResult() {
|
||||||
|
SimpleParseDate simpleParseDate = new SimpleParseDate();
|
||||||
|
String date = "2022-40-40";
|
||||||
|
assertEquals("Sat May 10 00:00:00 UTC 2025", simpleParseDate.parseDate(date, Arrays.asList("MM/dd/yyyy", "dd.MM.yyyy", "yyyy-MM-dd")).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenInvalidDate_thenAssertThrows() {
|
||||||
|
SimpleDateTimeFormater simpleDateTimeFormater = new SimpleDateTimeFormater();
|
||||||
|
assertEquals(java.time.LocalDate.parse("2022-12-04"), simpleDateTimeFormater.parseDate("2022-12-04"));
|
||||||
|
assertThrows(DateTimeParseException.class, () -> simpleDateTimeFormater.parseDate("2022-13-04"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDateIsCorrect_thenParseCorrect() {
|
||||||
|
SimpleDateUtils simpleDateUtils = new SimpleDateUtils();
|
||||||
|
assertNull(simpleDateUtils.parseDate("53/10/2014"));
|
||||||
|
assertEquals("Wed Sep 10 00:00:00 UTC 2014", simpleDateUtils.parseDate("10/09/2014").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDateIsCorrect_thenResultCorrect() {
|
||||||
|
SimpleDateTimeFormat simpleDateTimeFormat = new SimpleDateTimeFormat();
|
||||||
|
assertNull(simpleDateTimeFormat.parseDate("53/10/2014"));
|
||||||
|
assertEquals(LocalDate.parse("2014-10-10"), simpleDateTimeFormat.parseDate("2014-10-10"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue