1+ from datetime import datetime
2+ import re , traceback
3+ 4+ class FormatError (Exception ):
5+ pass
6+ 7+ def date_generate (start_date :str , end_date :str , start_hour :str , end_hour :str , min_active_days_per_week :int , max_active_days_per_week :int ) -> list [datetime ]:
8+ """
9+ Generate a list of date between two dates
10+
11+ Parameters:
12+ start_date(str): starting date, format as YYYY-MM-DD
13+ end_date(str): ending date, format as YYYY-MM-DD
14+ start_hour(str): starting hour per date, format as hour:minutes:second
15+ end_hour(str): ending hour per date, format as hour:minutes:second
16+ min_active_days_per_week(int): minimum active days per week, used for random function as the minimum value
17+ max_active_days_per_week(int): maximum active days per week, used for maximum value in random function
18+
19+ Return:
20+ list[datetime]: return a list of datetime objects
21+ """
22+ date_regex_pattern = r'^(\d{4})-(\d{2})-(\d{2})$'
23+ if not bool (re .match (date_regex_pattern , start_date )) or not bool (re .match (date_regex_pattern , end_date )):
24+ raise FormatError ('Invalid date format. Date format must match "YYYY-MM-DD"' )
25+ 26+ 27+ 28+ 29+ 30+ if __name__ == '__main__' :
31+ try :
32+ date_list = date_generate ('2023年01月01日' , '2023年03月01日' , '08:00:00' , '17:00:00' , 2 , 5 )
33+ 34+ if date_list :
35+ for date in date_list :
36+ print (date )
37+ except FormatError as e :
38+ traceback .print_exc ()
0 commit comments