diff --git a/.idea/runConfigurations/JabRef_Main.xml b/.idea/runConfigurations/JabRef_Main.xml
index 4bb85cf63f1..a588730b31a 100644
--- a/.idea/runConfigurations/JabRef_Main.xml
+++ b/.idea/runConfigurations/JabRef_Main.xml
@@ -11,4 +11,4 @@
-
\ No newline at end of file
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8cb143a852..ab913ae2173 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -55,6 +55,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
### Fixed
+- We fixed an issue where an exception occurred when pasting an entry with a publication date-range of the form 1910/1917 [#7864](https://github.com/JabRef/jabref/issues/7864)
- We fixed an issue where an exception occured when a preview style was edited and afterwards another preview style selected. [#8280](https://github.com/JabRef/jabref/issues/8280)
- We fixed an issue where the actions to move a file to a directory were incorrectly disabled. [#7908](https://github.com/JabRef/jabref/issues/7908)
- We fixed an issue where an exception occurred when a linked online file was edited in the entry editor [#8008](https://github.com/JabRef/jabref/issues/8008)
diff --git a/src/main/java/org/jabref/model/entry/Date.java b/src/main/java/org/jabref/model/entry/Date.java
index 6364a9c62d9..b63b78c7781 100644
--- a/src/main/java/org/jabref/model/entry/Date.java
+++ b/src/main/java/org/jabref/model/entry/Date.java
@@ -42,6 +42,7 @@ public class Date {
}
private final TemporalAccessor date;
+ private final TemporalAccessor endDate;
public Date(int year, int month, int dayOfMonth) {
this(LocalDate.of(year, month, dayOfMonth));
@@ -57,8 +58,26 @@ public Date(int year) {
public Date(TemporalAccessor date) {
this.date = date;
+ endDate = null;
}
+ /**
+ * Creates a Date from date and endDate.
+ *
+ * @param date the start date
+ * @param endDate the start date
+ */
+ public Date(TemporalAccessor date, TemporalAccessor endDate) {
+ this.date = date;
+ this.endDate = endDate;
+ }
+
+ /**
+ * Creates a Date from date and endDate.
+ *
+ * @param dateString the string to extract the date information
+ * @throws DateTimeParseException if dataString is mal-formatted
+ */
public static Optional parse(String dateString) {
Objects.requireNonNull(dateString);
@@ -66,6 +85,19 @@ public static Optional parse(String dateString) {
return Optional.empty();
}
+ // if dateString has format of uuuu/uuuu, treat as date range
+ if (dateString.matches("[0-9]{4}/[0-9]{4}")) {
+ try {
+ String[] strDates = dateString.split("/");
+ TemporalAccessor parsedDate = SIMPLE_DATE_FORMATS.parse(strDates[0]);
+ TemporalAccessor parsedEndDate = SIMPLE_DATE_FORMATS.parse(strDates[1]);
+ return Optional.of(new Date(parsedDate, parsedEndDate));
+ } catch (DateTimeParseException ignored) {
+ return Optional.empty();
+ }
+
+ }
+
try {
TemporalAccessor parsedDate = SIMPLE_DATE_FORMATS.parse(dateString);
return Optional.of(new Date(parsedDate));
diff --git a/src/test/java/org/jabref/model/entry/DateTest.java b/src/test/java/org/jabref/model/entry/DateTest.java
index 379f3fe9101..deba84b4dd5 100644
--- a/src/test/java/org/jabref/model/entry/DateTest.java
+++ b/src/test/java/org/jabref/model/entry/DateTest.java
@@ -16,6 +16,12 @@
class DateTest {
+ @Test
+ void parseCorrectlyYearRangeDate() throws Exception {
+ Date expectedDataRange = new Date(Year.of(2014), Year.of(2017));
+ assertEquals(Optional.of(expectedDataRange), Date.parse("2014/2017"));
+ }
+
@Test
void parseCorrectlyDayMonthYearDate() throws Exception {
Date expected = new Date(LocalDate.of(2014, 6, 19));