blob: 30590857f8df99aa54aa6ea0937a150e6904f316 [file] [log] [blame]
import re
from datetime import datetime
from dateutil.relativedelta import relativedelta
DEFAULT_TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
regex = re.compile(
r'((?P<years>\d+?)y)?((?P<months>\d+?)m)?((?P<weeks>\d+?)w)?((?P<days>\d+?)d)?'
)
# parse_time parses timedelta string to time dict
# input: <string> 1y2m3w5d - all values should be integer
# output: <dict> {year: 1, month: 2, week: 3, day: 5}
def parse_timedelta_string(time_str):
empty_flag = True
try:
parts = regex.match(time_str)
if not parts:
return None
parts = parts.groupdict()
time_params = {}
for key in parts:
if parts[key]:
time_params[key] = int(parts[key])
empty_flag = False
else:
time_params[key] = 0
if empty_flag: return None
return time_params
except:
return None
def get_current_strtime():
now = datetime.now()
return now.strftime(DEFAULT_TIME_FORMAT)
def timeago(years, months, weeks, days, from_date=None):
if from_date is None:
from_date = datetime.now()
return from_date - relativedelta(years=years, months=months, weeks=weeks, days=days)
## yearsago using Standard library
# def yearsago(years, from_date=None):
# if from_date is None:
# from_date = datetime.now()
# try:
# return from_date.replace(year=from_date.year - years)
# except ValueError:
# # Must be 2/29!
# assert from_date.month == 2 and from_date.day == 29 # can be removed
# return from_date.replace(month=2, day=28,
# year=from_date.year-years)