accounting/accounting/bzdate.py

54 lines
1.1 KiB
Python
Raw Normal View History

2024-07-31 16:16:21 +08:00
from datetime import date, timedelta
"""
Patterns =
'D'
'W[0-6]'
'M[00-31]'
'S[1-3]-[00-31]'
'Y[01-12]-[00-31]'
}
"""
def str2date(sd):
a = [ int(i) for i in sd.split('-') ]
return date(*a)
def is_monthend(dt):
if isinstance(dt, str):
dt = str2date(dt)
nxt_day = dt + timedelta(days=1)
if dt.month != nxt_day.month:
return True
return False
def is_match_pattern(pattern, strdate):
if pattern == 'D':
return True
dt = ste2date(strdate)
if pattern.startswith('W'):
w = (int(pattern[1]) + 1) % 7
if dt.weekday() == w:
return True
return False
if pattern.startswith('M'):
day = int(pattern[1:])
if day == 0 and is_monthend(dt):
return True
if day == dt.day:
return True
return False
if pattern.startswith('S'):
m,d = [ int(i) for i in pattern[1:].split('-') ]
m %= 4
if m == dt.month and d == dt.day:
return True
return False
if pattern.startswith('Y'):
m,d = [ int(i) for i in pattern[1:].split('-') ]
if m == dt.month and d == dt.day:
return True
return False