Merge pull request #248 from maebert/1-9-1

Fix parsing of  future timestmpas
This commit is contained in:
Manuel Ebert 2014-07-21 17:50:06 +09:00
commit f8a337f66e
4 changed files with 23 additions and 9 deletions

View file

@ -4,6 +4,7 @@ Changelog
### 1.9 (July 21, 2014)
* __1.9.1__ Fixed: Dates in the future can be parsed as well.
* __1.9.0__ Improved: Greatly improved date parsing. Also added an `-on` option for filtering
### 1.8 (May 22, 2014)

View file

@ -21,6 +21,13 @@ Feature: Zapped bugs should stay dead.
Then we should see the message "Entry added"
and the journal should contain "2013-11-30 15:42 Project Started."
Scenario: Date in the future should be parsed correctly
# https://github.com/maebert/jrnl/issues/185
Given we use the config "basic.json"
When we run "jrnl 26/06/2019: Planet? Earth. Year? 2019."
Then we should see the message "Entry added"
and the journal should contain "2019-06-26 09:00 Planet?"
Scenario: Loading entry with ambiguous time stamp
#https://github.com/maebert/jrnl/issues/153
Given we use the config "bug153.json"

View file

@ -8,7 +8,7 @@ jrnl is a simple journal application for your command line.
from __future__ import absolute_import
__title__ = 'jrnl'
__version__ = '1.9.0'
__version__ = '1.9.1'
__author__ = 'Manuel Ebert'
__license__ = 'MIT License'
__copyright__ = 'Copyright 2013 - 2014 Manuel Ebert'

View file

@ -3,8 +3,9 @@ from dateutil.parser import parse as dateparse
try: import parsedatetime.parsedatetime_consts as pdt
except ImportError: import parsedatetime as pdt
DEFAULT_FUTURE = datetime(datetime.now().year, 12, 31, 23, 59, 59)
DEFAULT_PAST = datetime(datetime.now().year, 1, 1, 0, 0)
FAKE_YEAR = 9999
DEFAULT_FUTURE = datetime(FAKE_YEAR, 12, 31, 23, 59, 59)
DEFAULT_PAST = datetime(FAKE_YEAR, 1, 1, 0, 0)
consts = pdt.Constants(usePyICU=False)
consts.DOWParseStyle = -1 # "Monday" will be either today or the last Monday
@ -20,9 +21,14 @@ def parse(date_str, inclusive=False, default_hour=None, default_minute=None):
default_date = DEFAULT_FUTURE if inclusive else DEFAULT_PAST
date = None
year_present = False
while not date:
try:
date = dateparse(date_str, default=default_date)
if date.year == FAKE_YEAR:
date = datetime(datetime.now().year, date.timetuple()[1:6])
else:
year_present = True
flag = 1 if date.hour == date.minute == 0 else 2
date = date.timetuple()
except Exception as e:
@ -50,6 +56,6 @@ def parse(date_str, inclusive=False, default_hour=None, default_minute=None):
# Rather then this, we would like to see parsedatetime patched so we can tell it to prefer
# past dates
dt = datetime.now() - date
if dt.days < -28:
if dt.days < -28 and not year_present:
date = date.replace(date.year - 1)
return date