Skip to content

Instantly share code, notes, and snippets.

@yogendratamang48
Created April 24, 2020 09:21
Show Gist options
  • Save yogendratamang48/17fff61dddde54cce6f7cba30e4b224a to your computer and use it in GitHub Desktop.
Save yogendratamang48/17fff61dddde54cce6f7cba30e4b224a to your computer and use it in GitHub Desktop.
from datetime import datetime, timedelta
from nltk import word_tokenize
MOMENTS = {
'seconds': ['seconds', 'second', 'sec', 'just'],
'minutes': ['mins', 'minutes', 'today'],
'hours': ['hours', 'hour'],
'days': ['day', 'days', 'veröffentlicht', 'Tagen' ],
'today': ['today',],
'weeks': ['week', 'weeks'],
'months': ['month', 'months'],
}
class DateHelper:
@staticmethod
def handle_T_format(raw_text):
'''
2017-05-26T12:00
'''
date_obj = datetime.strptime(raw_text, '%Y-%m-%dT%H:%M')
return date_obj
@staticmethod
def handle_TZ_format(raw_text):
'''
2017-05-26T12:00
'''
if 'z' in raw_text.lower():
raw_text = raw_text.upper().replace('Z', '').strip()
date_obj = datetime.strptime(raw_text, '%Y-%m-%dT%H:%M:%S')
return date_obj
@staticmethod
def handle_timestamp(raw_text):
date_obj = datetime.fromtimestamp(int(raw_text))
return date_obj
@staticmethod
def handle_format(raw_date, _format):
date_obj = datetime.strptime(raw_date, _format)
return date_obj
def handle_moments(raw_date):
'''
'''
if raw_date is None:
return None
tokens = word_tokenize(raw_date.lower())
numbers = [_.strip('+') for _ in tokens if _.strip('+').isnumeric()]
if numbers:
number = numbers[0]
else:
number = 1
unit = ''
for moment, variants in MOMENTS.items():
for variant in variants:
if variant in tokens:
unit = moment
break
if unit:
break
if unit == 'seconds':
_delta = timedelta(seconds=int(number))
elif unit == 'minutes':
_delta = timedelta(minutes=int(number))
elif unit == 'hours':
_delta = timedelta(hours=int(number))
elif unit == 'days':
_delta = timedelta(days=int(number))
elif unit == 'today':
_delta = timedelta(days=0)
elif unit == 'weeks':
_delta = timedelta(days=7*int(number))
elif unit == 'months':
_delta = timedelta(days=int(number))
return (datetime.now()-_delta)
def test_helper():
raw_data = '2017-05-26T12:00'
date_obj = DateHelper.handle_T_format(raw_data)
print(date_obj.__class__)
def test_date_moments():
texts = ['3 seconds ago',
'minutes a go',
'just now',
'4 hours ago',
'1 week ago',
'1 hour ago',
'5 hours ago',
'a week ago',
'3 weeks ago',
'15+ days ago',
'30+ days ago',
]
for _text in texts:
raw_date = DateHelper.handle_moments(_text)
print(_text, ":", raw_date)
if __name__ == '__main__':
test_date_moments()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment