Comments (1)
Hey @hoonkai
Yeah I figured it out too. It seems like keywords like ago
, before
etc only apply to the last time keyword
you enter.
11 hours 0 mins ago
translates to + 11 hours - 0 minutes
11 hours ago
translates to - 11 hours
basically take ago
and put a minus in the last keyword you entered. If you want the exact results you need to put ago after ever keyword. Like 11 hours ago 0 minutes ago
Here is a reproducable example
>>> from datetime import datetime
>>> import parsedatetime as pdt
>>> cal = pdt.Calendar(version=pdt.VERSION_CONTEXT_STYLE)
>>> reference_date = datetime(2021, 8, 12, 12, 0, 0)
>>> cal.parseDT('11 hours ago', sourceTime=reference_date)[0]
2021-08-12 01:00:00
>>> cal.parseDT('11 hours 0 minutes ago', sourceTime=reference_date)[0]
2021-08-12 23:00:00
>>> cal.parseDT('11 hours ago 0 minutes ago', sourceTime=reference_date)[0]
2021-08-12 01:00:00
What I did is replace these keywords and put ago in a timedelta like so:
import re
from datetime import datetime
import parsedatetime as pdt
def parse_with_ago(phrase, ref_dt):
regex = r'\s(ago|before)(\s|$)'
cal = pdt.Calendar(version=pdt.VERSION_CONTEXT_STYLE)
phrase, did_have_ago = re.subn(regex, ' ', phrase)
parsed, context = cal.parseDT(phrase, sourceTime=ref_dt)
if did_have_ago == 0: # No ago or before detected
return parsed
# Ago or before detected
td = parsed - ref_dt
phrase = '{} days ago {} seconds ago'.format(td.days, td.seconds)
parsed, context = cal.parseDT(phrase, sourceTime=ref_dt)
return parsed
now = datetime(2021, 8, 12, 12, 0, 0)
date = parse_with_ago('11 hours 0 minutes ago', now)
print(date) # 2021-08-12 01:00:00
date = parse_with_ago('11 hours ago', now)
print(date) # 2021-08-12 01:00:00
date = parse_with_ago('1000 years ago', now)
print(date) # 1021-08-13 12:00:00
date = parse_with_ago('1000 years 0 months 0 days 0 hours 0 minutes 0 seconds ago', now)
print(date) # 1021-08-13 12:00:00
from parsedatetime.
Related Issues (20)
- specify certain date for calendar HOT 1
- Interpreting backwards instead of forwards HOT 1
- Is it work if there are more than one dates in text? HOT 2
- "This" at the end of a time string sets time to "now"
- importing is failed HOT 2
- parsedatetime.Calendar() is broken in Python 2.7 HOT 3
- Several typos in the NL file (native speaker).
- AttributeError: 'module' object has no attribute 'Locale' HOT 2
- how to support Chinese Language? HOT 2
- Wrong Parsing on XMP-datetime
- tzinfo flag doesn't appear to do anything
- FAIL: testDate3ConfusedHourAndYear (tests.TestComplexDateTimes.test) HOT 1
- "this afternoon" doesn't respect sourceTime in Calendar.parse()
- Comparing parsedatetime to dateparser? HOT 1
- Interpret "at" as an indicator for time
- Support for preceding 'previous' modifiers
- recognize UTC timestamps
- testNextMonth fails on February 29th
- Add type annotations
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from parsedatetime.