Fix strptime issue
This commit is contained in:
85
utility.py
85
utility.py
@@ -117,66 +117,97 @@ class DateTimeHelper:
|
||||
def getCurrentDateTime():
|
||||
return datetime.now()
|
||||
|
||||
# January 1, 2026
|
||||
@staticmethod
|
||||
def strptime(theTime,theFormat):
|
||||
try:
|
||||
return datetime.strptime(theTime,theFormat)
|
||||
except:
|
||||
return datetime(*(time.strptime(theTime,theFormat)[0:6]))
|
||||
def strptime(date_string):
|
||||
month_map = {
|
||||
'January': 1, 'February': 2, 'March': 3, 'April': 4,
|
||||
'May': 5, 'June': 6, 'July': 7, 'August': 8,
|
||||
'September': 9, 'October': 10, 'November': 11, 'December': 12
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def canstrptime(theTime,theFormat):
|
||||
try:
|
||||
datetime.strptime(theTime,theFormat)
|
||||
return True
|
||||
except:
|
||||
date_string = date_string.replace(',', '')
|
||||
parts = date_string.split()
|
||||
if len(parts) == 3:
|
||||
month_str, day_str, year_str = parts
|
||||
month = month_map.get(month_str)
|
||||
day = int(day_str)
|
||||
year = int(year_str)
|
||||
|
||||
if month is not None:
|
||||
return datetime(year, month, day)
|
||||
else:
|
||||
raise ValueError("Invalid month name in date string")
|
||||
else:
|
||||
raise ValueError("Date string format is incorrect")
|
||||
|
||||
# January 1, 2026
|
||||
@staticmethod
|
||||
def canstrptime(date_string):
|
||||
month_map = {
|
||||
'January': 1, 'February': 2, 'March': 3, 'April': 4,
|
||||
'May': 5, 'June': 6, 'July': 7, 'August': 8,
|
||||
'September': 9, 'October': 10, 'November': 11, 'December': 12
|
||||
}
|
||||
|
||||
date_string = date_string.replace(',', '')
|
||||
parts = date_string.split()
|
||||
if len(parts) != 3:
|
||||
return False
|
||||
|
||||
month_str, day_str, year_str = parts
|
||||
month = month_map.get(month_str)
|
||||
if month is None:
|
||||
return False
|
||||
day = int(day_str)
|
||||
year = int(year_str)
|
||||
return True
|
||||
|
||||
# returns a datetime
|
||||
@staticmethod
|
||||
def applyRelativeTime(sometime,relativetime):
|
||||
relativeTimeResult = sometime
|
||||
if(not isinstance(sometime,datetime)):
|
||||
raise Exception('Invalid type for parameter')
|
||||
if(not isinstance(relativetime,str)):
|
||||
raise Exception('Invalid type for parameter')
|
||||
if DateTimeHelper.canstrptime(relativetime,'%B %d, %Y'):
|
||||
sometime = DateTimeHelper.strptime(relativetime,'%B %d, %Y')
|
||||
return sometime
|
||||
if DateTimeHelper.canstrptime(relativetime):
|
||||
relativeTimeResult = DateTimeHelper.strptime(relativetime)
|
||||
return relativeTimeResult
|
||||
if relativetime=='just now':
|
||||
return sometime
|
||||
return relativeTimeResult
|
||||
if relativetime=='just in':
|
||||
return sometime
|
||||
return relativeTimeResult
|
||||
relativetimesplit=relativetime.split()
|
||||
if len(relativetimesplit)==2:
|
||||
year=datetime.now().year
|
||||
relativetimex=relativetime+', '+str(year)
|
||||
relativeDate = DateTimeHelper.strptime(relativetimex, '%B %d, %Y')
|
||||
relativeDate = DateTimeHelper.strptime(relativetimex)
|
||||
if(relativeDate>datetime.now()):
|
||||
year=datetime.now().year-1
|
||||
relativetimex=relativetime+', '+str(year)
|
||||
relativeDate=DateTimeHelper.strptime(relativetimex,'%B %d, %Y')
|
||||
relativeDate=DateTimeHelper.strptime(relativetimex)
|
||||
days=sometime-relativeDate
|
||||
sometime=sometime-days
|
||||
relativeTimeResult=sometime-days
|
||||
elif relativetimesplit[1]=='hour' or relativetimesplit[1]=='hours':
|
||||
hours=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(hours=hours)
|
||||
relativeTimeResult=sometime-timedelta(hours=hours)
|
||||
elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days':
|
||||
days=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(days=days)
|
||||
relativeTimeResult=sometime-timedelta(days=days)
|
||||
elif relativetimesplit[1]=='minute' or relativetimesplit[1]=='minutes':
|
||||
minutes=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(minutes=minutes)
|
||||
relativeTimeResult=sometime-timedelta(minutes=minutes)
|
||||
elif len(relativetimesplit)==3: # '16 mins ago' '2 hours ago'
|
||||
if relativetimesplit[1]=='mins':
|
||||
minutes=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(minutes=minutes)
|
||||
relativeTimeResult=sometime-timedelta(minutes=minutes)
|
||||
elif relativetimesplit[1]=='hours':
|
||||
hours=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(hours=hours)
|
||||
relativeTimeResult=sometime-timedelta(hours=hours)
|
||||
elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days':
|
||||
days=int(relativetimesplit[0])
|
||||
sometime=sometime-timedelta(days=days)
|
||||
return sometime
|
||||
relativeTimeResult=sometime-timedelta(days=days)
|
||||
return relativeTimeResult
|
||||
|
||||
class DateTime:
|
||||
def __init__(self):
|
||||
|
||||
Reference in New Issue
Block a user