diff --git a/ChangeLog b/ChangeLog index 37ff2a419..79ed95609 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-25 Douglas S. Blank + * src/gen/lib/test/date_test.py: new slash date tests + * src/gen/lib/date.py: new get_slash(), fix slash conversions + * src/DateHandler/_DateParser.py: parser sets slash date to Julian + 2008-02-24 Brian Matherly * src/GrampsDbUtils/_ReadXML.py: * src/GrampsDbUtils/_GrmapsDbWriteXML.py: diff --git a/src/DateHandler/_DateParser.py b/src/DateHandler/_DateParser.py index be63d6f11..7fa17e04b 100644 --- a/src/DateHandler/_DateParser.py +++ b/src/DateHandler/_DateParser.py @@ -593,6 +593,10 @@ class DateParser: else: date.set(qual, Date.MOD_NONE, cal, subdate) + if date.get_slash(): + date.set_calendar(Date.CAL_JULIAN) + date.set_year(date.get_year()) # forces recalc + def invert_year(self, subdate): return (subdate[0], subdate[1], -subdate[2], subdate[3]) diff --git a/src/gen/lib/date.py b/src/gen/lib/date.py index 337d1c3bb..1690d3001 100644 --- a/src/gen/lib/date.py +++ b/src/gen/lib/date.py @@ -384,13 +384,11 @@ class Date: Slash date is given as year1/year2, where year1 is Julian year, and year2=year1+1 the Gregorian year. + + Slash date is already taken care of. """ - if dateval[Date._POS_SL] : - return (dateval[Date._POS_YR]+1, dateval[Date._POS_MON], - dateval[Date._POS_DAY]) - else : - return (dateval[Date._POS_YR], dateval[Date._POS_MON], - dateval[Date._POS_DAY]) + return (dateval[Date._POS_YR], dateval[Date._POS_MON], + dateval[Date._POS_DAY]) def date_offset(dateval, offset): """ Local function to do date arithmetic: add the offset, return @@ -733,9 +731,18 @@ class Date: """ Return a Date copy based on year, month, and day offset. """ - retval = Date(self) + orig_cal = self.calendar + if self.calendar != 0: + new_date = self.to_calendar("gregorian") + else: + new_date = self + retval = Date(new_date) retval.set_yr_mon_day_offset(year, month, day) - return retval + if orig_cal == 0: + return retval + else: + retval.convert_calendar(orig_cal) + return retval def copy_ymd(self, year=0, month=0, day=0): """ @@ -915,6 +922,13 @@ class Date: """ if calendar == self.calendar: return + if self.get_slash(): + if (self.calendar == Date.CAL_JULIAN and + calendar == Date.CAL_GREGORIAN): + self.set_year(self.get_year() + 1) + elif (self.calendar == Date.CAL_GREGORIAN and + calendar == Date.CAL_JULIAN): + self.set_year(self.get_year() - 1) (year, month, day) = Date._calendar_change[calendar](self.sortval) if self.is_compound(): ryear = max(self.dateval[Date._POS_RYR], 1) @@ -1040,3 +1054,11 @@ class Date: retval = Date(self) retval.convert_calendar(cal) return retval + + def get_slash(self): + """ + Return true if the date is a slash-date. + """ + return self._get_low_item_valid(Date._POS_SL) + + diff --git a/src/gen/lib/test/date_test.py b/src/gen/lib/test/date_test.py index d89ae9941..59dfa53b9 100644 --- a/src/gen/lib/test/date_test.py +++ b/src/gen/lib/test/date_test.py @@ -298,7 +298,9 @@ def suite(): ("aft jan 1, 2000", "before dec 31, 1999", False), ("before jan 1, 2000", "after dec 31, 1999", False), ("jan 1, 2000/1", "jan 1, 2000", False), - ("jan 1, 2000/1", "jan 1, 2001", True), + ("jan 1, 2000/1", "jan 1, 2001", False), + ("jan 1, 2000/1", "jan 1, 2000/1", True), + ("jan 1, 2000/1", "jan 14, 2001", True), ("about 1984", "about 2005", False), ("about 1990", "about 2005", True), ("about 2007", "about 2006", True),